c++ - 双冒号 - std:: set使用




为什么std:set(用单个冒号)编译? (2)

在块范围内,后跟单个冒号的标识符会引入标签。 因此,您的陈述相当于:

set<string> keys;

除了它带有标签 std 并且可以通过语句 goto std; 跳转到 goto std;

出于某种原因,编译器知道名称 set - 也许你 using namespace std; ,或 using std::set; 或类似的东西,或者你可能在某处定义了自己的 set 类型。

我不小心写了

std::set<string> keys;

如:

std:set<string> keys;

但奇怪的是,Visual Studio 2013仍然可以编译。

为什么会这样?

实际上, keys 不仅被定义,而且后来被用作一组字符串,例如

if(keys.find(keystr)==keys.end()){
    keys.insert(keystr);
    toret.push_back(tempv);
}

在第二种情况下,std是一个标签。 它与case语句中的拼写默认值相同。





visual-studio