'identifier'什么时候是C++'name'?
When is an 'identifier' a 'name' in C++?
在c++中什么时候'标识符'称为'名称' ?我主要读到术语"名称"被过度使用,而不是"标识符",如在示例中:
struct S { int i };
S thing1;
在这种情况下,thing1
是名称还是标识符?或者术语"标识符"answers"名称"是类似的?在C语言中,当提到一个对象时,是否使用术语"名称"?
在c++中,术语标识符只是数字、字母和_
的序列,而不是以数字开头。这样的标识符可以出现在任何地方,并且不需要标识任何东西,尽管它的名字(没有双关语的意思)。
术语名称将一个意义与某个语法结构联系起来。c++规范规定,如果下列语法结构之一表示实体(对象、类、模板等等)或标签(您可以使用goto
跳转到其中)
- <
- 标识符/em>
- template-id (
identifier <...>
,operator-function-id <...>
和literal-operator-id <...>
,如foo <int>
)。 - 转换函数id (
operator type
,与operator int
相同) - operator-function-id (
operator @
,与operator +
相同) - literal-operator-id (
operator "" identifier
,与operator "" _foo
相同)
对于这些结构中的每一个,名称与另一个名称相同的规则定义不同:对于标识符,两个名称相同或序列相同(这只是词法比较)。对于形式conversion-function-id的名称,如果使用的类型是相同的类型,则它们是相同的(因此这是语义比较)。
从literal-operator-id的示例中可以看到,非终结符标识符可以出现在语法中不是名称的地方。所以不是每个标识符都是名称,也不是每个名称都是标识符。在template-id的例子中,我们使用了嵌套的名称。<...>
前面的结构又分别是名称,因为它们表示声明的模板。
相关文章:
- 使用模板进行堆栈实现; "name followed by :: must be a class or namespace"
- C++中"dependent name"的定义是什么?
- 将系数存储在头文件的数组中("does not name a type"错误)
- 将成员函数作为构造函数参数调用时出错 "Variable is not a type name"
- C++初学者:为什么我的编译器根据我的循环返回"name not found"?
- 当初始值设定项是基类名时'initializer does not name a non-static data member or base class'错误
- 如何解决"'mutex' in namespace 'std' does not name a type"?
- 在 C++ 中使用命名空间时出现"does not name a type"错误
- 已声明时"Does not name a type"错误
- 嵌套类"does not name a type"
- C++ "Using Uninitialized Memory.. (variable name) "
- 在反转字符串'my.name.is'时,我得到的输出为"is@.name.my"。我不明白'@'是从哪里来的
- C++错误:"class name"之前的预期类型说明符
- C++从"NameBase"类到模板"Name"类的相互关系的成语(或模式)
- 错误 C6011:取消引用空指针"NAME"。C++
- 无法构建 RcppArmadillo.package.skeleton 测试包:"R_init_"的多重定义<name>
- C++ 中的类之间的数据重新循环 - 错误:'<class name>'未在此范围内声明
- "char const * name() const _WEBSOCKETPP_NOEXCEPT_TOKEN_ {"剂量是什么意思
- 为什么 std::locale( " " ).name() 在 clang 和 gcc 上给出不同的结果?
- 为什么当我的代码超出函数范围时,"does not name a type"出现编译器错误?