什么会'std:;'用c ++做什么?

时间:2012-10-09 19:32:28

标签: c++ std colon

我最近修改了一些代码,并在函数的一行中发现了一个预先存在的错误:

std:;string x = y;

此代码仍然可以编译并且按预期工作。

字符串定义有效,因为此文件为using namespace std;,因此首先不需要std::

问题是,为什么std:;正在编译以及它在做什么,如果有的话?

5 个答案:

答案 0 :(得分:90)

std:是一个标签,可用作goto的目标。

正如 @Adam Rosenfield 在评论中指出的那样,它是一个合法的标签名称。

C ++03§6.1/ 1:

  

标签有自己的名称空间,不会干扰其他标识符。

答案 1 :(得分:32)

这是一个标签,后跟一个空语句,后跟一个字符串x的声明。

答案 2 :(得分:12)

它的标签后跟字符串

答案 3 :(得分:8)

(expression)std: (end of expression); (another expression)string x = y;

答案 4 :(得分:1)

编译器会告诉你发生了什么:

#include <iostream>
using namespace std;
int main() {
  std:;cout << "Hello!" << std::endl;
}

gcc和clang都给出了一个非常明确的警告:

std.cpp:4:3: warning: unused label 'std' [-Wunused-label]
  std:;cout << "Hello!" << std::endl;
  ^~~~
1 warning generated.

从这个故事中删除:始终在启用警告的情况下编译代码(例如-Wall)。