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