簡體   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