※ 本文轉寄自 ptt.cc, 文章原始頁面
[問題] temporary 可以take reference 嗎?
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(?)
我覺得越來越不懂了,求解@@
謝謝大家
----
Sent from BePTT on my OPPO CPH1943
--
※ 發信站: 批踢踢實業坊(ptt.cc), 來自: 1.200.14.226 (臺灣)
※ 文章網址: https://www.ptt.cc/bbs/C_and_CPP/M.1712838430.A.E4C.html
41 則留言
amamoimi 作者的近期文章
[問題] 用函數設定參照的問題
各位晚安打擾了 https://onlinegdb.com/_DyNuxd2H 我一直不太明白為什麼為什麼這樣寫是合法的 f(a)=5這行不是在把function call設值嗎 但是照理來說只能assign value給變數吧?(gpt這
[問題]char 指標問題
不好意思我程式新手又來擾民了@@ https://onlinegdb.com/Vm941gQ0_ 這是我在書上看到的程式碼 功能是把變數byte by byte的交換 但是我看不太懂那個swap函數... 為什麼可以隨便把參數冠上一個(ch
[問題] 遞迴函數的變數儲存
不好意思又是我c++新手 想問一個問題 舉個例子 #include<iostream> using namespace std; void f(int); int main(){ f(2); return 0;} void f(
→
→
→
→
→
推
→
→
→
→
→
→
→
→
→
推
→
推
→
→
→
→
→
→
→
→
推
→
→
→
推
→
→
→
→
→
→
→
→
→
→