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

use*_*910 89 c++ std colon

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

std:;string x = y;
Run Code Online (Sandbox Code Playgroud)

此代码仍然编译并一直按预期工作.

字符串定义是有效的,因为这个文件是using namespace std;,因此std::首先是不必要的.

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

K-b*_*llo 90

std:它是一个标签,可用作目标goto.

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

C++03§6.1/ 1:

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

  • C++03§6.1/ 1说"标签有自己的名称空间,不会干扰其他标识符." (11认同)
  • AFAIK标签有自己的名称空间,因此除了关键字或宏之外,它们绝不会与其他任何东西发生冲突. (4认同)

Fre*_*son 32

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


Rah*_*thi 12

它是一个标签,后跟字符串


小智 8

(expression)std: (end of expression); (another expression)string x = y;
Run Code Online (Sandbox Code Playgroud)

  • 语法方面,它实际上是一个`(label-)语句,而不是`表达式'. (4认同)