繁体   English   中英

范围解析运算符之前/之后的空格

[英]Space(s) before/after the scope resolution operator

C ++语言中的哪个规则允许范围解析运算符::前后出现空格?

即以下编译没有警告

#include <string>
#include <iostream>

int main ()
{
    std::    string s = "Hello";
    std::    cout << s << std     ::endl;
}

通常,您可以在令牌之间放置尽可能多的空间。 在某些情况下,空间是必需的(例如,分隔标识符); 在其他情况下,它是可选的(例如,在标识符和运算符之间)。

C ++ 11 2.7中对此进行了描述:

如下所述,空白,水平和垂直选项卡,换行符,换页符和注释(统称为“空白”)将被忽略,但它们用于分隔标记。 [ 注意:需要一些空格来分隔相邻的标识符,关键字,数字文字和包含字母字符的替代标记。 尾注 ]

范围解析运算符的语法规则如下:

:: <identifier>
<class-name> :: <identifier>
<namespace> :: <identifier>
<enum class> :: <identifier>
<enum struct> :: <identifier>

在这五种情况下,您都可以看到::运算符的使用方式与其他C ++一元和二进制运算符的使用方式相同,这意味着通用规则也适用于它。 即,允许您在您认为必要的情况下在这些标记之间包含任意数量的空格字符。

引用C ++标准中的两个引号就足够了

2.7令牌[lex.token] 1令牌有五种:标识符,关键字,文字,18运算符和其他分隔符。 如下所述,空白,水平和垂直选项卡,换行符,换页符和注释(统称为“空白”)将被忽略,但它们用于分隔标记。

2.13运算符和标点符号1 C ++程序的词法表示包括许多预处理标记,这些标记在预处理器的语法中使用或转换为运算符和标点符号

预处理操作或标点之一:

::

在翻译阶段7中, 每个预处理操作或标点都会转换为单个令牌

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM