为什么函数允许使用变量名和数据类型名,而不能使用关键字?

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;

它给我错误,

Error 1 error C2061: syntax error : identifier 'node'

为什么相同的变量 node 名称可以在函数 (malloc) 中正常工作,而不能在 (new) 中使用。

我正在使用 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作为你的一个明确的类型名称 具体例子。这确实是相同的问题和解决方案 将 nodenew 一起使用还是与 malloc.

一起使用

但是正如已经指出的那样,最好为您的类型和变量选择不同的名称。