【问题标题】:When is an 'identifier' a 'name' in C++?C ++中的“标识符”何时是“名称”?
【发布时间】:2011-10-30 21:23:55
【问题描述】:

什么时候在 C++ 中将“标识符”称为“名称”?我主要读到过度使用术语“名称”而不是示例中的“标识符”:

struct S { int i };
S thing1;

在这种情况下,thing1name 还是 identifer?还是“标识符”和“名称”这两个术语是相似的?在 C 中,在引用对象时是否使用了“名称”一词?

【问题讨论】:

    标签: c++ c naming-conventions


    【解决方案1】:

    在 C++ 中,术语标识符 只是数字、字母和_ 的序列,而不是以数字开头。这样的标识符可以出现在任何地方,并且不必标识任何东西,尽管它的名字(不是双关语)。

    name 一词将含义与特定的语法结构相关联。 C++ 规范说,如果以下语法结构之一表示实体(objectclasstemplate 和等等)或一个标签(你可以用goto跳转到)

    • 标识符
    • template-ididentifier <...>operator-function-id <...>literal-operator-id <...>,如 foo <int>)。
    • conversion-function-idoperator type,如operator int
    • operator-function-idoperator @,如operator +
    • literal-operator-idoperator "" identifier,如operator "" _foo

    对于这些构造中的每一个,名称与另一个名称相同时的规则定义不同:对于标识符,两个名称相同的序列相同(这只是词法比较)。对于 conversion-function-id 形式的名称,如果使用的类型是相同的类型,则它们是相同的(因此这是语义比较)。

    正如您在 literal-operator-id 的示例中看到的那样,非终结符 identifier 可以出现在语法中不是名称的地方。所以不是每个标识符都是一个名字,也不是每个名字都是一个标识符。在 template-id 的例子中,我们有一个嵌套使用的名字。 <...> 之前的构造又是名称,因为它们表示已声明的模板。

    【讨论】:

    • 非常简洁和最准确的区别描述。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2010-10-24
    • 2013-10-24
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多