我试图在C ++ 11中制作一个基于范围的lopp:
std::vector<Satellite> Satellites; // Class member
//...
int number = 1;
for(auto sat : this->Satellites) {
sat.setNumber(number++);
}
我收到了这个警告:
&#39;自动&#39;变化意义在C ++ 11中;请删除它[-Wc ++ 0x-compat]
当然我可以坚持for(Satellite sat : this->Satellites)
,但我试图测试auto关键字。
我曾经读过使用C ++ 11可以使用auto,但是自{+ 3}以来它已经改变了(或者它看起来好像!):
关键字auto不是新的;它实际上可以追溯到ANSI C之前的时代。 但是,C ++ 11改变了它的含义;汽车不再指定 具有自动存储类型的对象。相反,它声明了一个对象 其类型可从其初始化程序中推导出来。汽车的旧意义 从C ++ 11中删除,以避免混淆。
所以:我是否可以像C ++ 11一样使用它,我的问题出在IDE(Eclipse CDT Juno),或者我应该以不同的方式使用它(或者根本不删除auto关键字)?
答案 0 :(得分:5)
您在C ++ 11中的用法“很好”,并且在C ++ 03中语法无效。
唯一可能的问题是你正在制作每个Satellite
的副本,这不一定是你想要的。您可能会得到这样的参考:
for(const auto& sat : this->Satellites) { ....
或
for(auto& sat : this->Satellites) { ....
如果你想要对vector的元素进行可变引用。
您应该检查您的编译器是否完全支持此功能。虽然它是有效的C ++ 11,但警告建议使用旧的C ++ 11前标准编译器。
答案 1 :(得分:0)
您正在使用非11编译器进行编译,这就是您收到消息的原因。