2011-10-30 62 views
9

什麼時候是'標識符'在C++中稱爲'名稱'?我主要是讀的是,術語`名稱在實施例」用於過度而不是‘標識符’爲:什麼時候在C++中的'標識符''名稱'?

struct S { int i }; 
S thing1; 

在這種情況下,是一個thing1名稱 IDENTIFER ?或者術語「標識符」和「名稱」是否類似?在C中,引用一個對象時是否使用了「名稱」這個術語?

回答

14

在C++中,術語標識符只是數字,字母和_的序列,不以數字開頭。這樣的標識符可以出現在任何地方,並且不必識別任何東西,儘管它的名字(沒有雙關語意)。

術語名稱將含義與某種語法結構相關聯。 C++的規範說以下語法的一個構造是一個名字,如果它是指一個實體(一個對象,一個,一個模板等)或一個標籤(在這裏你可以跳到與goto

  • 標識符
  • 模板ididentifier <...>operator-function-id <...>literal-operator-id <...>,如在foo <int>)。
  • 轉換功能-IDoperator type,如在operator int
  • 操作員功能-IDoperator @,如在operator +
  • 字面運營商-IDoperator "" identifier,如在operator "" _foo

對於這些構造中的每一個,名稱與其他名稱相同時的規則的定義不同:對於標識符,兩個名稱ar e同樣的順序是相同的(這只是一個詞法比較)。對於轉換函數ID的名稱,如果使用的類型是相同類型(因此這是一個語義比較),它們是相同的。

正如你在字面運營商ID的例子看,非終端標識符可以出現在地方語法它是不是一個名字。因此,並非每個標識符都是名稱,並非每個名稱都是標識符。在模板標識的示例中,我們使用了名稱的嵌套使用。分別在<...>之前的結構是再次命名的,因爲它們表示已聲明的模板。

+1

非常簡潔和最準確的描述的區別。 –

相關問題