术语"词汇"在C++中意味着什么?

use*_*214 8 c++

我读到有词法常量,词汇运算符,词汇范围等.术语"词汇"如何改变常量,例如字符串文字,任何运算符或某个标识符范围的含义?

Ben*_*igt 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));
Run Code Online (Sandbox Code Playgroud)

最后,词法范围是指程序源代码中存在标识符的部分(可以使用).这与动态范围(也称为对象生存期)形成对比,动态范围是对象存在的程序的一部分(维护其值并且可以通过指针或引用间接操作,即使名称不在词法范围内) .

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
}
Run Code Online (Sandbox Code Playgroud)


mar*_*ara 0

使用术语“词法常量”并不意味着不同类型的常量。

一般来说,当你谈论 C++ 语法时,你会使用术语“词法 this”、“词法 that”。与将常量存储在对象中、文件的范围或矩阵上的运算符相反。

因此,如果我正在谈论一行代码,其中有一个常量,例如:(32786) 我可以使用单词 lexical (也许不必要)来确认该数字仅作为 C++ 标记存在的含义。

因此,当我谈论C++ 标记及其关系时,我会像 维基百科一样使用“词汇”一词。