当使用struct时,为什么sizeof()函数在C ++中的工作方式存在一些歧义

时间:2017-05-05 10:45:23

标签: c++

struct node
{
  int data;
  struct node *next;
}

cout<<sizeof(struct node)<<sizeof(node)<<endl; 
//no error, C++ allows us to use sizeof(struct node) and sizeof(node) both. 

而我们不能对int数据类型

做同样的事情
int a;
cout<<sizeof(int) <<sizeof(a) <<endl;//there is no error here

  //BUT

cout<<sizeof(int a) <<endl;//this throws an error 

我理解“struct node”本身就像一个数据类型,可用于声明“struct node”类型的变量。通过sizeof()如何使用int的行为,可以理解sizeof(struct node)等同于sizeof(datatype),因此是正确的用法。

但是sizeof(节点)如何工作呢?它不会抛出任何错误。 “node”本身不能用于声明任何其他变量,它需要是“struct node”来声明变量。

1 个答案:

答案 0 :(得分:5)

在C ++中,声明为struct A {/* blah blah blah */};class A {/* blah blah blah*/};的类类型可以稍后称为class Astruct A或简称A。这些类型可以传递给sizeof运算符。

变量也可以传递到sizeof运算符,如下所示:

int a;
long b;
node c;

std::cout << sizeof(a) << ' ' << sizeof(b) << ' ' << sizeof(node) << '\n';

但是int a之类的变量声明无法放入sizeof运算符中:

std::cout << sizeof(int a); // Compile error

同样,涉及类类型的声明不能放入sizeof运算符:

std::cout << sizeof(node c); // Compile error