C ++语言中的哪些规则允许在范围解析运算符::
之后出现空格?
即。以下compiles without a warning:
#include <string>
#include <iostream>
int main ()
{
std:: string s = "Hello";
std:: cout << s << std ::endl;
}
答案 0 :(得分:6)
通常,您可以在令牌之间放置尽可能多的空间。在某些情况下,空间是必要的(例如,分隔标识符);在其他情况下,它是可选的(例如在标识符和运算符之间)。
这在C ++ 11 2.7中有描述:
空白, 水平和垂直制表符,换行符,换页符和注释(统称为“空格”),如上所述 在下面,将被忽略,除非它们用于分隔令牌。 [注意:需要一些空格来分隔其他相邻的标识符,关键字,数字文字和包含字母的替代标记 字符。 - 结束记录]
答案 1 :(得分:4)
范围解析运算符的语法规则如下:
:: <identifier>
<class-name> :: <identifier>
<namespace> :: <identifier>
<enum class> :: <identifier>
<enum struct> :: <identifier>
在所有五种情况下,您都可以看到::
运算符的使用方式与使用C ++的其他一元和二元运算符的方式相同,这意味着一般规则也适用于它。也就是说,您可以在这些令牌之间拥有尽可能多的空白字符。
答案 2 :(得分:3)
引用C ++标准中的两个引用
就足够了2.7 Tokens [lex.token] 1有五种标记:标识符,关键字,文字,18个运算符和其他分隔符。空白, 水平和垂直制表符,换行符,换页符和注释 (如下所述,除此之外)忽略了(统称为“白色空间”) 因为它们用来分隔代币。
2.13运算符和标点符号1 C ++程序的词汇表示包括许多用于的预处理标记 预处理器的语法或转换为令牌 运营商和标点符号
preprocessing-op-or-punc:
之一
::
每个preprocessing-op-or-punc都转换为单个令牌 翻译阶段7 ::