为什么我没有使用基于C++ 11范围的for循环迭代向量?

use*_*170 0 c++ iterator vector c++11 c++98

std::vector<std::string> endpointLSRKey;

for(auto it = endpointLSRKey.begin(); it != endpointLSRKey.end(); ++it) {
        lsr->setItem(0, "", *it, address);
    }
Run Code Online (Sandbox Code Playgroud)

然后得到一个错误说"auto"改变了c ++ 11中的含义,删除它!

所以我改变它:

for(std::string& str : endpointLSRKey){
        lsr->setItem(0, "", str, address);
    }
Run Code Online (Sandbox Code Playgroud)

然后得到一个错误说"在C++ 98模式下不允许'循环'基于范围"

完全糊涂了,如何迭代它?

为什么有时它是c ++ 11而有时它是c ++ 98?

Bil*_*eal 5

听起来你需要将编译器设置为C++ 11模式.错误消息:

在C++ 98模式下不允许使用"基于范围的''循环"

指出这一点.

执行此操作的方式取决于您的编译器.

当您看到此消息时:

得到一个错误说"auto"改变了c ++ 11中的含义

您的编译器仍处于C++ 98/03模式.该关键字auto存在于C++ 03中,但在大多数情况下没有任何意义,因为默认变量是自动存储.(你可以让一个变量进入静态存储用其标记static,也就是说,autostatic因为signedunsigned(在C++ 98/03).

因为这个含义在C++ 98/03中并不真正有用,并且因为C++ 11中的含义发生了变化,所以C++ 03模式下的编译器可能会抱怨使用auto带有警告.如果您将警告视为错误,则会将其变为错误.因此,您看到的消息.