[英]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.