在循环中使用auto vs decltype(vec.size())处理字符串向量

问题描述 投票:0回答:1
教自己使用向量和字符串的一些细节。为此,我在标准输入中输入了一个段落,将每个单词存储在字符串向量中的单独元素中以进行处理。我知道可能有更好的方法来实际处理文本信息,我只是想做一些练习以了解更多信息。因此,在处理向量的循环中我有几个选择。我在源代码中找到的两种方法是使用auto声明和decltype声明。两者似乎与我相当,但是decltype在我眼中有点笨拙和难以理解。有什么特别的理由要使用一个VS另一个吗?还有一个优势吗?一个更安全吗?或者,在循环中显式声明size_type是否有任何优点/缺点?这是我的一些代码,分别用于说明,但是我敢肯定,你们中的大多数人都明白我在说什么。

#import <iostream> #import <string> #import <vector> int main() { std::vector<std::string> vec; std::string input; while(std::cin >> input) vec.push_back(input); //auto for loop for(auto i = 0; i != vec.size(); ++i) { //processing } //decltype for loop for(decltype(vec.size()) i = 0; i != vec.size(); ++i) { //processing } return 0; }

c++ c++17
1个回答
0
投票
在这种情况下,auto的问题是它将变为int,它是从size到未签名的有符号VS。即使由于使用!=而不是<而不会引起任何比较问题,但是如果由于某些原因要再次与size比较,您可能最终在循环中遇到问题。对于decltype版本,在这种情况下是多余的。通常,decltype将与模板一起使用,因为它当时不知道确切的类型。因此,在这种情况下,最好的方法应该是unsignedstd::size_t
© www.soinside.com 2019 - 2024. All rights reserved.