可能重复:
C++0x 自动关键字多少是太多了
我发现在临界点附近使用“自动”可能会导致一些问题。
这是示例代码:
#include <iostream>
#include <typeinfo>
#include <limits>
using std::cout;
using std::endl;
using std::numeric_limits;
using std::cerr;
int main() {
auto i = 2147483647 /* numeric_limits<int>::max() */ ;
cout << "The type of i is " << typeid(i).name() << endl;
int count = 0;
for (auto i = 2147483647;
i < 2147483657 /* numeric_limits<int>::max() + 10 */ ; ++i) {
cout << "i = " << i << " " << endl;
if (count > 30) {
cerr << "Too many loops." << endl;
break;
}
++count;
}
return 0;
}
“auto”决定了“i”的类型是整数,但整数的上限是2147483647,很容易溢出。
这是Ideone(gcc-4.5.1)和LWS(gcc-4.7.2)的输出。它们是不同的:“i”在Ideone(gcc-4.5.1)上的循环中保持 2147483647 并在LWS(gcc-4.7.2)上溢出。但它们都不是预期的结果:10 个周期,每次 +1。
我应该避免在临界点附近使用“自动”吗?或者我如何在这里适当地使用“自动”?
更新:有人说“尽可能使用汽车”。在这个线程中你告诉我。我认为这不太对。“long long int”类型更适合这里的“int”类型。我想知道哪里可以安全地使用“自动”,哪里不能。
更新 2:Herb Sutter文章的解决方案 4(b)应该已经回答了这个问题。