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(?)
我覺得越來越不懂了,求解@@
謝謝大家