【问题标题】:What does the term "lexical" means in C++?术语“词法”在 C++ 中是什么意思?
【发布时间】:2011-11-07 21:26:34
【问题描述】:

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

【问题讨论】:

    标签: c++


    【解决方案1】:

    “lexical”表示与源代码相关。

    例如,1 是一个词法常数。 OTOH,sizeof(char) 也是编译时整数常量表达式,但它不是词法常量。从词法上讲,它是对sizeof 运算符的调用。

    词法运算符作用于源代码。预处理器运算符属于这一类。

    在大多数情况下,我在程序中的任何位置使用1sizeof(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
    }
    

    【讨论】:

      【解决方案2】:

      使用术语“词法常数”并不意味着另一种常数。

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

      如果我说的是一行代码,它有一个常量,例如:(32786) 我可以使用词法(可能是不必要的)这个词来确认数字仅作为 C++ 标记存在的含义。

      所以当我谈论C++ tokens 和它们之间的关系时,我会使用像wikipedia does 这样的词汇。

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 2018-05-12
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2011-08-01
        • 2013-12-08
        • 1970-01-01
        • 2020-01-31
        相关资源
        最近更新 更多