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

时间:2015-01-21 04:43:33

标签: c++ variables syntax malloc new-operator

以前我们使用malloc进行动态内存分配,

struct node* node = (struct node*) malloc(sizeof(struct node));

工作得很好。

在进行重新分解时,我将其更改为,

struct node* node = new node;

它给了我错误,

  

错误1错误C2061:语法错误:标识符'节点'

为什么同一变量node名称与函数(malloc)一起工作正常,而不适用于(new)。

我正在使用Visual Studio 2012.

2 个答案:

答案 0 :(得分:2)

问题是:

struct node* node = new node;
             ^^^^

只要编译器看到带下划线的部分,令牌node就会引用该变量。因此,当它处理new node时,它是new name_of_a_variable,这是没有意义的。要解决这个问题,你可以将变量称为不同的东西(无论如何这都是个好主意)。

malloc版本没有问题,因为你自己从不使用node,你总是使用struct node,它明确地是一个类型名称。

答案 1 :(得分:0)

确认另一个答案(说明是使用了关键字) 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作为明确的类型名称 特别的例子。这确实是同样的问题和解决方案 是否将nodenewmalloc一起使用。

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