微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

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

如何解决类成员变量的隐式默认值?

我正在为我的认证考试做 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。

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。