gpt4 book ai didi

c++ - 指向未由对象地址初始化的对象的指针如何为类的数据成员赋值?

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

指向对象的指针在声明为未初始化时指向某个垃圾位置。如果使用相同的指针初始化任何数据成员,那么没有对象的数据成员存在于何处。因为对象可以有数据成员,而不是未初始化的指针到一个对象。

我尝试在初始化它的数据成员之前/之后打印未初始化的“指向对象的指针”的值。该值保持不变,这意味着它们仍然没有创建对象并且指针指向任何垃圾值。

#include <iostream>
using namespace std;

class play {
public:
int runs;
};

int main() {
play *batsman; // Not initialized
cout<<batsman<<endl; // "0" means pointing to any garbage location
batsman ->runs = 10; // Which object's data member "runs" is been initialized?
cout<<batsman<<endl; // "0" still points to some garbage location
play obj;
batsman = &obj; // Initializing the pointer
cout<<batsman<<endl; // 0x7ffe76256e60
return 0;
}

我预计如果指向对象的指针未使用对象的任何地址初始化,那么它如何初始化或分配值给类的数据成员。尝试将值分配给数据成员应该是运行时错误而不是属于任何对象。

最佳答案

应该是运行时错误。这是错误的,当您违反 C++ 规则时,它通常是未定义的行为。未定义的行为意味着任何事情都可能发生,这并不意味着一定有错误,也不意味着它不会“工作”。

未定义的行为是使 C++ 编程变得困难的原因之一,因为当您的程序有错误时,它们的行为是不可预测的。未定义行为的优点是它意味着编译器可以生成非常快的代码,因为它不必检查垃圾指针之类的东西,它只是假定所有指针都是有效的。

关于c++ - 指向未由对象地址初始化的对象的指针如何为类的数据成员赋值?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/57069574/

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