为什么 std:set(带有单个冒号)可以编译?
Why can std:set (with a single colon) compile?
我不小心写了
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 语句中的拼写默认值不正确相同。
相关文章:
- 通过命令行在Visual Studio中编译单个独立文件
- 在 Visual Studio 中的 1 个项目中编译单个 C++ 源文件
- 为什么 std:set(带有单个冒号)可以编译?
- c++ 是否保证标头初始化的静态 const 成员跨编译单元和库共享单个实例?
- 使用单个makefile编译C和C++
- C++ 在多个其他类中使用单个类 - 编译时出现多个定义错误
- C Visual Studio代码不使用工作区中的单个文件夹编译
- 在单个makefile目标中同时编译C和CPP源
- 将大小为编译时常量的数组初始化为单个值
- 无法在 Netbeans 中编译单个C++文件,但能够生成完整的项目
- 在 netbeans 中编译项目中的单个文件
- 在 Visual Studio 中为单个解决方案编译和使用多个项目
- 覆盖单个文件的编译标志
- qmake:将单个cpp文件编译为可执行文件
- CMake-删除单个翻译单元的编译标志
- 在 Visual Studio 2010 中编译单个C++文件
- 在ios objective-c项目中导入、使用和编译单个c++头文件
- 编译单个文件并与其他 .o 文件链接时是否可以进行核心转储
- 在 CMake 项目下编译单个文件
- visual studio 2010 -编译单个文件,不需要IDE, c++