我读到有词法常量、词法运算符、词法范围等。术语“词法”如何改变常量(例如字符串文字)、任何运算符或某些标识符的范围的含义?
“词法”意味着它与源代码相关。
例如,1
是一个词汇常量。奥托,sizeof(char)
也是一个编译时整型常量表达式,但它不是词法常量。从词汇上来说,它是对sizeof
操作员。
词法运算符作用于源代码。预处理器运算符属于这一类。
在大多数情况下,我是否使用都没有区别1
or sizeof(char)
我的程序中的任何地方。但是,作为词法运算符的参数#
or ##
它产生了相当大的差异,因为它们适用于实际代码而不是评估结果:
#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
}
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)