gpt4 book ai didi

c++ - 在不存在的对象上调用成员函数工作正常,C++

转载 作者:搜寻专家 更新时间:2023-10-31 01:44:41 25 4
gpt4 key购买 nike

考虑以下代码:

#include <iostream>
using namespace std;

class someClass
{
public:
someClass(){ cout<<"someClass"<<endl; }
void g() const { cout<<"g()"<<endl;}
};

int main()
{
void* memory = new void*[5*(sizeof(someClass)/sizeof(char))];
someClass *someClassArray = reinterpret_cast<someClass*>(memory);

for(int i=0;i<5;i++)
{
someClassArray[i].g();
}
}

这段代码的输出是:

g()
g()
g()
g()
g()

这意味着没有调用构造函数。但是在数组中 someClassArray 是 someClass 类型的对象,我可以调用 g() 函数并获得正确的输出。

为什么这个程序执行正确,而没有构造 someClass 类型的对象?

最佳答案

当调用成员函数 g() 时,编译器只需将指向对象的指针作为第一个参数传递给它(即指向类型为 void * 的已分配数组的元素,您将其解释为 someClass *)。该函数不使用此指针访问类的任何数据成员。事实上,对于这个简单的类,构造函数不需要构造任何东西。该类没有数据成员。所以调用函数是没有问题的。

关于c++ - 在不存在的对象上调用成员函数工作正常,C++,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/23187319/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com