【发布时间】:2016-09-22 19:13:42
【问题描述】:
在使用auto 关键字进行编程时,有时知道编译器在编译时使用的类型会很方便。编译是否在我需要知道类型的地方中止并不重要。简单例子:
std::vector< int > s{1, 2, 3};
for (auto elem : s) {
elem = 5;
}
for (auto elem : s) {
std::cout << elem << std::endl;
}
将打印
1
2
3
因为 elem 的类型是 int,而不是 int&。最好尝试编译代码并获取elem 的类型以尽早发现此类错误。
【问题讨论】:
-
不确定你在问什么。您为确保
elem是一个引用而编写的任何代码似乎都比一开始就编写auto&& elem要长得多。 -
您可以将
std::is_reference与static_assert一起使用。但是将它添加到每个循环中不仅仅是确保您使用正确的类型开始。不,没有办法让编译器为你做检查,因为赋值在任何方面都不是无效的。 -
您的示例看起来像是一个编译器警告的好理由。例如,我的编译器说
warning: variable ‘elem’ set but not used。 -
IIRC,
auto绝不是引用类型。您是否希望编译器从赋值的存在中推断出您打算使用引用并警告您? -
expression_name: stackoverflow.com/a/20721887/576911