簡體   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