根據該C++標識符命名規則:標識符規則是否適用於運算符重載函數?
的有效標識符是一個或多個字母,數字的序列,或下劃線字符(_),必須重新開始或者以字母或下劃線。空格,標點符號和符號不能是標識符的一部分。
但對於運算符重載函數可以包含除字母,數字等字符或下劃線,例如像的名字:
user_data_type operator+(const user_data_type & t) const;
這是一個例外標識符命名規則或不用於運算符重載的函數名稱不被視爲標識符?
根據該C++標識符命名規則:標識符規則是否適用於運算符重載函數?
的有效標識符是一個或多個字母,數字的序列,或下劃線字符(_),必須重新開始或者以字母或下劃線。空格,標點符號和符號不能是標識符的一部分。
但對於運算符重載函數可以包含除字母,數字等字符或下劃線,例如像的名字:
user_data_type operator+(const user_data_type & t) const;
這是一個例外標識符命名規則或不用於運算符重載的函數名稱不被視爲標識符?
從§3.1
的名稱是使用標識符(2.11),操作者功能-ID(13.5)的,文字的操作員-ID(13.5.8),轉換功能 id(12.3.2)或表示實體或標籤(6.6.4,6.1)的模板id(14.2)。
因此,正如你所看到的,標識符(它們是變量/函數名稱)有規則。但也有一些例外情況,運算符超載( operator-function-id)就是其中之一,這意味着不同的規則適用於它們。
從§13。5:
操作員功能-ID:操作者操作者操作者
:一個
新刪除新[]刪除[]
+ - * /%& | 〜
! = <> + == * =/=%=
= & = | = < < >> = < < = = = =
< => = & &!| | ++ - , - > * - >
()[]
所以,operator+
是允許的,也operator-
,基本上operator
+ any of the operators listed above
。
operator+
不是一個正常的標識符,它是一個運營商功能ID在N4140 13.5/1中定義。根據定義,它由operator
後跟一個運算符組成。通過這條規則,你也可以作爲再次寫入
operator +
甚至
user_data_type
operator
+
(const user_data_type & t) const;
,operator+
是不是一個正常的標識符。
您引用的規則不適用於此處。
有五種類型的令牌:關鍵字,標識符,常數, 運營商,和隔板
因而操作者不是標識符。
user_data_type operator + (const user_data_type & t) const;/*
^^^^^ ^^^^^ ^
identifier keyword operator
*/
運算符重載函數只能包含標點符號或符號,它們是可以重載的運算符。當使用關鍵字operator
後跟一個有效的操作符時,您正在使用C的內置功能,而不是創建自己的標識符。
所以基本上'operator-function-id'序列不是(技術上)一個標識符,對吧? – stackerjoe
@stackerjoe正確,它不能同時:) – Rakete1111
謝謝。現在清楚了。 – stackerjoe