基于范围的循环:自动更改C 11中的含义
Range based loops: Auto changes meaning in C++11
我试图在C 11中制作基于范围的LOPP:
std::vector<Satellite> Satellites; // Class member
//...
int number = 1;
for(auto sat : this->Satellites) {
sat.setNumber(number++);
}
我得到了此警告:
'auto'在C 11中更改含义;请删除[-wc 0x-compat]
当然我可以坚持使用for(Satellite sat : this->Satellites)
,但是我试图测试自动关键字。
我读到C 11的使用是可能的,但是最近我发现自C 0x以来它发生了变化(或者看起来确实如此!):
关键字自动不是新事物;实际上,它可以追溯到前Asi C时代。 但是,C 11改变了其含义。自动不再指定 具有自动存储类型的对象。相反,它声明一个对象 它的类型可根据其初始化器进行推论。汽车的旧含义 从C 11中删除以避免混淆。
so:我能够像这样使用C 11这样使用它,而我的问题在IDE(Eclipse CDT Juno),还是应该以不同的方式使用它(或完全删除自动关键字)?
您的用法在C 11中为" fine",并且在C 03中是无效的语法。
唯一潜在的问题是您正在副本,每种Satellite
的副本,这不一定是您想要的。您可能会得到这样的参考:
for(const auto& sat : this->Satellites) { ....
或
for(auto& sat : this->Satellites) { ....
如果您想对向量元素进行可变的引用。
您应该检查编译器是否完全支持此功能。而它是有效的C 11,警告建议和旧的Pre-C 11标准编译器。
您正在使用非编译器编译,这就是为什么收到消息的原因。
相关文章:
- 为什么我的变量存在于其范围之外
- set_intersection范围范围
- 满足标准::范围::范围概念
- 向量向量的范围范围
- C++参数类型以接受适用于基于范围的 for 循环的所有序列
- 代码具有特定于函数的变量,用于更改范围之外的值
- 将自适应阈值应用于范围函数 opencv c++
- 用辅助方法范围范围的问题来操纵字符串
- C++:将参数应用于函数范围
- C++11:用容器参数定义函数(类似于基于范围的)
- 在C /STL中,是否有相当于Python范围()的紧凑型
- 用于循环范围范围
- 如何制作增强多指数复合范围语句,等效于x和y
- std::copy_n 是否适用于重叠范围?
- 依赖于模板参数的范围查找
- 标准算法 any_of()、all_of() 和 none_of() 应用于空范围
- 常数,但仅适用于此范围的剩余部分
- 确定谓词是否适用于一个范围的全部、部分或全部元素
- 延长临时的生命周期,适用于块范围的聚合,但不是通过"新";为什么?
- 矢量超出范围/范围检查