2011-11-07 67 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 
}