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;
}
auto
的问题是它将变为int
,它是从size
到未签名的有符号VS。即使由于使用!=
而不是<
而不会引起任何比较问题,但是如果由于某些原因要再次与size
比较,您可能最终在循环中遇到问题。对于decltype
版本,在这种情况下是多余的。通常,decltype
将与模板一起使用,因为它当时不知道确切的类型。因此,在这种情况下,最好的方法应该是unsigned
或std::size_t
。