为什么即使我们将指针分配给 NULL,指针的指向对象的大小也不为零
Why size of pointed object of pointer is not zero even if we assigned pointer to NULL?
我想知道为什么即使我们将指针分配给 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)
相同。
相关文章:
- 为什么指针对象没有调用默认构造函数
- 如何访问双指针对象中的方法
- 如何使用智能指针对象执行成员函数指针
- 调用带有指针对象错误的指针变量
- 如何从模板类重载创建的指针对象上的运算符?
- C++指针对象的运算符重载
- 如何初始化数组指针对象
- 如何打印出唯一指针对象向量中的值(基于范围的循环)?C++
- C++指针对象差异
- 涉及继承,指针对象的交易以及何时进行的问题
- 表达式必须在C 中具有指针对象类型
- 下标需要数组或指针类型表达式必须具有指针对象类型
- 字符指针对象和相应的字符数组元素比较
- 如何在 c++ 中克隆为弱指针对象
- 指针对象使用CPP中的指针表达式进行比较
- Visual Studio中智能指针对象的自定义视图
- 使用指针 /对象 /模板参数正确构成
- 如果我确定只有一个线程一次处理指针/对象,则C/C 仍应使用同步
- 如何将值分配给指针对象 c++
- 更改智能指针对象,然后访问它