gpt4 book ai didi

在没有对象初始化的情况下调用 C++ 函数

转载 作者:塔克拉玛干 更新时间:2023-11-03 00:08:46 25 4
gpt4 key购买 nike

为什么会运行下面的代码?

#include <iostream>
class A {
int num;
public:
void foo(){ num=5; std::cout<< "num="; std::cout<<num;}
};

int main() {
A* a;
a->foo();
return 0;
}

输出是

num=5

我使用 gcc 编译它,我在第 10 行只收到以下编译器警告:

(警告:“a”在此函数中使用时未初始化)

但是按照我的理解,这段代码不应该根本就不能运行吗?当 num 不存在时它为什么将值 5 赋给 num 因为还没有创建类型 A 的对象?

最佳答案

该代码会产生未定义的行为,因为它试图解除对未初始化指针的引用。未定义的行为是不可预测的,并且不遵循任何逻辑。出于这个原因,关于您的代码为什么做某事或不做某事的任何问题都是没有意义的。

你问它为什么运行?它不运行。它会产生未定义的行为

您问它如何将 5 分配给一个不存在的成员?它不会为任何东西分配任何东西。它会产生未定义的行为

你是说输出是5?错误的。输出不是 5。没有有意义的输出。代码产生未定义的行为。仅仅因为它在您的实验中以某种方式碰巧打印出 5 就毫无意义,也没有任何有意义的解释。

关于在没有对象初始化的情况下调用 C++ 函数,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/5360501/

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