为什么函数允许变量名和数据类型名,但关键字不允许
Why variable name and datatype name is allowed with function but not with keyword?
以前我们使用malloc
进行动态内存分配,
struct node* node = (struct node*) malloc(sizeof(struct node));
它工作正常。
在进行重构时,我将其更改为,
struct node* node = new node;
它给了我错误,
错误1 错误 C2061:语法错误:标识符"节点"
为什么相同的变量node
名称适用于函数(malloc),而不适用于(新)。
我正在使用Visual Studio 2012。
问题是:
struct node* node = new node;
^^^^
一旦编译器看到带下划线的部分,令牌node
就会引用该变量。所以当它处理new node
时,它是new name_of_a_variable
没有意义的。要解决此问题,您可以将变量称为其他名称(无论如何,这是一个好主意)。
malloc 版本没有问题,因为您从不单独使用 node
,您始终使用 struct node
它明确是一个类型名称。
确认另一个答案(说是使用关键字 struct
使malloc
示例能够编译),该程序使用 C++14 编译并在 https://ideone.com 上运行:
#include <iostream>
struct node { int x; };
int main()
{
struct node* node = new struct node;
node->x = 1;
std::cout << node->x << std::endl;
return 0;
}
因此,struct node
您可以在具体的例子。 这确实是相同的问题和解决方案无论您将node
与new
一起使用还是与malloc
一起使用.
但正如已经指出的,最好为您的类型和变量选择不同的名称。
相关文章:
- 为什么 Clang 不允许"and"作为函数名称?
- 不允许在向量中添加更多元素
- std::带有自定义缓冲区的 iostream 不允许我写入
- Visual Studio 2017 不允许我创建 C++ 专用模板
- 返回时不允许隐式转换
- 为什么 c++(g++) 不允许模板返回类型和函数名称之间有空格?
- 为什么"delete"关键字不删除节点?
- 为什么 c++ 不允许(自动)强制转换?
- 为什么 c++11 不允许使用自动
- 为什么不允许成员函数和非成员函数之间的函数重载?
- 为什么不允许使用可变长度数组作为向量元素?
- 余数除法和不允许除以零 (c++) 时遇到问题
- C++从外部类继承的嵌套类;不允许使用不完整的类型
- 在 c++ 中三元运算符中不允许继续(关键字)吗?
- 为什么在指向对象的迭代器上调用函数不允许我更改对象本身?
- 错误:在第 6 行'{'标记之前,此处不允许使用函数定义
- 为什么Visual Studio(2017;15.7.5)不允许我更改c ++关键字颜色
- 为什么函数允许变量名和数据类型名,但关键字不允许
- 不允许使用带类的关键字
- 为什么不允许将类成员定义的' static '关键字放在命名空间范围内?