sizeof *this object
sizeof *this object
代码:
#include <cstdio>
class myc {
int dummy;
public:
int si(){return sizeof(*this);}
};
class d_myc : public myc {
int d_dummy;
};
int main() {
myc a;
d_myc b;
printf("%d %dn%d %d", a.si(), b.si(), sizeof(a), sizeof(b));
return 0;
}
输出:
4 4
4 8
我预期:
4 8
4 8
为什么我的期望是错误的?
sizeof
在编译时解析,而不是在运行时解析。因此CCD_ 2等价于CCD_ 3。
这在编译时解决:
class myc {
int dummy;
public:
int si(){return sizeof(*this);}
};
即CCD_ 4总是myc并且永远不会是CCD_。要获得您想要的内容,您必须覆盖d_myc
中的函数,以便在派生的中执行与基础相同的操作。这是因为sizeof(d_myc)
也包含基类。
相关文章:
- 表示"accepting anything for this template argument" C++概念的通配符
- 为什么使用 "this" 指针调用派生成员函数?
- C++错误:"error: int aaa::bbb is protected within this context"
- 我可以将调用类的"this"传递给 lambda 函数吗?
- 创建具有 new in 函数和"this is nullptr"异常的对象
- 关于C++中具有多重继承"this"指针的说明
- 在noexcept 规范中是否允许使用"this"?
- 如何修复"error: ‘_1’ was not declared in this scope"?
- 当覆盖存在时调用基本虚拟"binded to object"函数
- C++调用具有 *this 属性的单个帮助程序函数
- Doees the 'this' 指针参与虚函数的多态行为
- 在 c++ 中正确定义"this"关键字?
- 在什么情况下,两个堆栈分配的结构对象的 this 点指向同一个地址?
- "Unable to start debugging. No process is associated with this object." - 在Visual Studio Code中使用GDB
- QObject::连接无法将信号连接到*this*对象的插槽
- 析构函数中的"delete this"
- QPointer::clear() 是删除其引用的指针,还是"Clears this QPointer object."其他含义?
- Arduino:如果在构造函数中使用了 this->object.attach(pin),则带有伺服的类会破坏伺服行为
- sizeof *this object
- C++。与代码相关::块 IDE。"object is not declared in this scope"错误