class 成员变量的隐式默认值?

implicit default value for class member variable?

我正在为我的认证考试做 C++ 测试,我遇到了这个我不明白的练习: (问题是下面程序的输出是什么)

#include <iostream>
using namespace std;
class A {
public :
    float v;
    float set(float v) {
    A::v += 1.0;
    A::v = v+1.0;
    return v;
    }
    float get(float v){
    v +=A::v;
    return v;
    }
};

int main()
{
    A a;
    cout<< a.get(a.set(a.set(0.5)));
    return 0;
}

我预计 set 函数的第一行会出错,因为 A::v 从未初始化,但我的程序编译后似乎 A::v 默认值为 0.. 有人可以解释一下为什么没有编译错误吗?

就像你提到的,set的第一行使用了A::v,之前从未初始化过。但是,这本身不会产生错误,它是未定义的行为。这意味着编译器可能会为您初始化它,或者它可能只是选择它在内存中看到的随机数,或者他们喜欢的任何东西。 C++ 标准没有说明需要发生什么,所以它让编译器决定容易的事情。

但是,在大多数情况下,该行发生的任何事情在您的代码中都不会太重要。原因是 A::v 将在下一行重新分配给 v + 1。所以它应该几乎总是在最后打印 2。