我想知道为什么即使我们将指针分配给 NULL,指针指向的对象大小也不为零。谁能解释一下?
编译于 G++ 4.8,Ubuntu 14.04
Foo * foo=NULL;
cout<<"Size of pointed object of foo:"<<sizeof(*foo)<<endl; //why it is not zero
sizeof
是一个编译时指令。因此,没有运行时检查来查看指针是否实际指向真实对象。根本没有检查指针。编译器会将该指令替换为该类型的大小(以字节为单位(,Foo
在您的情况下也是如此。
在sizeof
内部,我们处于未评估的上下文中。其中的任何表达式都不会被计算。 sizeof
只关心你传递它的表达式的类型,*foo
的类型当然是Foo&
。 sizeof
忽略引用,因此它返回类型为 Foo
的对象将占用的大小(以字节为单位(。
再次请注意,您编写的表达式永远不会被计算,因此foo
指向的地方是否存在Foo
对象并不重要 - foo
的值(以及它指向的内存内容(与sizeof
无关。
sizeof
适用于类型,而不是值。*foo
的类型(松散地说(是Foo
,所以sizeof(*foo)
与sizeof(Foo)
相同。