基于范围的循环:自动更改意味着在C ++ 11中

时间:2014-01-21 09:30:16

标签: c++ c++11 auto

我试图在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关键字)?

2 个答案:

答案 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编译器进行编译,这就是您收到消息的原因。