關於下劃線名稱的問題部分回答了here,,但答案不完整,或者我沒有完全理解。下劃線,名稱和文字運算符
Sect。在C++ 11標準的2.14.8.7聲明此字面操作者作爲一個例子:
long double operator "" _w(long double);
除了聲明操作中,標準及其實施例做進一步的兩件事情是,如果單獨看,每個有意義:
- 它開始名稱
_w
帶下劃線;和 - 它將運算符放在全局名稱空間中。
我的問題有兩個部分:
- 根據the answer linked above,名稱
_w
不是標識符,或標識_w
是不是一個名,或...好,我是米困惑。 - 如果
_w
沒問題,那麼大寫的_W
也可以 -60.0_W
,意思是60.0瓦特?還是預處理器可能會錯誤地處理大寫的版本?
毫無疑問,和你一樣,我不習慣用下劃線開始全局名稱,這是習慣標準教派的習慣。 17.6.4.3.2.1顯然似乎不贊成。因此,如果您可以對下劃線,名稱和文字操作符進行一些更多的說明,則可以欣賞燈光。
'_W'會引起麻煩,作爲一個'#定義_W/* *什麼/'之前字面經營者的定義會導致'_W'到被替換。這不是'_W'中的'_W'被保留,但是實現可能像上面那樣有一個宏'_W'。現在,人們可能會懷疑標準是否真的允許在字面操作符標識符上進行宏替換,並且我會說是,因爲'_W'是一個單獨的預處理器標記。 – Xeo
@Xeo:謝謝。你碰巧知道標準中的哪個地方解釋說'_W'會引起麻煩嗎?如果是這樣,我想閱讀該部分。 – thb
對於預處理階段/標記,大多是子條款2.2和2.5。 '_W'是一個*標識符*,因此它是一個*預處理標記*,如果它命名一個宏,它將在階段4中展開。 – Xeo