2011-11-07 68 views

回答

0

使用術語「詞彙常量」並不意味着一種不同的常數。

一般來說,當你在談論C++語法時,你會使用術語詞法這個詞法。與存儲在對象中的常量以及文件的範圍或矩陣上的運算符不同。

所以,如果我談論的是一行代碼,它有一個像這樣的常量:(32786) 我可以使用詞彙(也許是不必要的)來確認數字僅存在於C++標記中的含義。

所以當我在談論C++ tokens及其關係時,我使用的詞彙詞如wikipedia does

7

「詞法」是指它與源代碼有關。例如,1是一個詞法常量。 OTOH,sizeof(char)也是一個編譯時積分常量表達式,但它不是一個詞法常量。詞法上,它是對sizeof運營商的調用。

詞彙運算符處理源代碼。預處理器操作員屬於這一類。

在大多數情況下,我在程序的任何地方使用1還是sizeof(char)都沒有區別。但是,正如詞法運營###它使一個相當大的差異的參數,因爲在實際的代碼這些工作,而不是評估的結果:

#define STR(x) #x 

std::string one = STR(1); 
std::string also_one = STR(sizeof(char)); 

最後,詞法作用域裝置的程序源的所述部分代碼在哪裏存在標識符(被識別,可以使用)。這與動態範圍(也稱爲對象生命期)形成對比,動態範圍是對象存在的程序部分(保持其值並可通過指針或引用間接操作,即使名稱不在詞法範圍內) 。

string f(string x) { return "2" + x; } // main's "y" is not in lexical scope, however it is in dynamic scope, and will not be destroyed yet 

int main(void) 
{ 
    string y = "5.2"; // y enters lexical scope and dynamic scope 

    string z = f("y"); // y leaves lexical scope as f is called, and comes back into lexical scope when f returns 

    return z.size(); 
    // z leaves lexical and dynamic scope, destructor is called 
}