为什么 std:set(带有单个冒号)可以编译?

Why can std:set (with a single colon) compile?

本文关键字:编译 单个冒 std set 为什么      更新时间:2023-10-16

我不小心写了

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);
}

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

set<string> keys;

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

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

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