c++新手最看了一些文章,发现一个问题,举个例子:
#include <iostream>
class A{
public:
int a=5;
int& g(){
return a;
}
A f(){
return *this;
}
};
int main()
{
A obj;
std::cout<<obj.f().g();
return 0;}
因为obj.f()的lifetime会持续到
std::cout<<obj.f().g();
这个line结束,所以g取obj.f().a的reference是ok的
但我还是觉得很疑惑,对temporary object 取reference 一般是不行的吧?
举例来说
int foo1(int a){
return a;}
int main(){
int& b=foo(5);}
如果说foo(5)会存在直到
int& b=foo(5)
这行结束,那这个code不是应该也ok吗
或是
int& foo2(int a){
return a;}
int main(){
int b=foo2(5);
std::cout<<foo2(5);}
同理这个不是也应该ok了吗..
这个是可以compile,但是不会cout出东西
把他丢去compiler explorer的话会发现foo2会直接回传0(?)
我觉得越来越不懂了,求解@@
谢谢大家