繁体   English   中英

临时对象在c ++中的行为方式?

[英]How temporary objects behave in c++?

当我尝试运行下面的代码时,我完全感到困惑。

#include<iostream>
using namespace std;

class test{
    public:
    int num = 30;

    int yourAge ;

    void set(){
        yourAge = (test().num)*2; 
    }
};

int main(){
    test obj;


    cout << test().yourAge << endl; // i was expecting garbage but giving me 0
    cout << obj.yourAge << endl;    // ya! garbage it is, in this case

    ///// now/////

    test().set()
    cout << test().yourAge << endl;  // Iwas expecting 60 but giving me againg 0

    cout << obj.yourAge << endl;  // I was expecting garbage but giving me 0;



    return 0;
}

我已经在代码中描述了我的问题,但是为什么它们给出了意外的结果。 为什么会这样呢? 是因为我使用的是临时的无名对象还是发生了其他事情? 感谢您的回答。

在任何使用test()地方,您都可以构建一个test类型的临时对象,该对象按照类中的指定进行初始化。
对于num成员,此初始化为30 ,但对于yourAge成员,此初始化可以为任何yourAge (静态存储除外,但这是另一个主题)。

然后,任何类似test().yourAge将构建一个临时对象,检索其值为未初始化的 yourAge成员(可以为yourAge或其他值),然后使该临时对象消失。

调用test().set()您将创建一个临时对象,使用set()方法初始化其yourName成员,但是让该对象消失而不使用它!
任何后续的test()表达式都是一个新的临时对象,没有理由与调用set()原因相关。

obj的情况与之类似,只是该对象将一直持续到包含它的块main()此处为main()函数)被执行为止。
它的yourAge成员从未初始化,因此它可以包含任何内容; 如果您曾经使用过obj.set()那么在该调用之后,您可能期望在obj.yourAge找到相关的obj.yourAge

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM