[問題] 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
→
04/11 21:24,
8月前
, 1F
04/11 21:24, 1F
→
04/11 21:28,
8月前
, 2F
04/11 21:28, 2F
→
04/11 21:38,
8月前
, 3F
04/11 21:38, 3F
→
04/11 21:39,
8月前
, 4F
04/11 21:39, 4F
→
04/11 21:44,
8月前
, 5F
04/11 21:44, 5F
謝謝!
那如果f改成{A obj2;
return obj2;}還會有RVO嗎(改成這樣output跟原來一樣)
推
04/11 21:46,
8月前
, 6F
04/11 21:46, 6F
謝謝!
1.的 a是lvalue? 但是obj.f() 應該是temporary 那就不應該是lvalue不是嗎0.0
→
04/11 21:46,
8月前
, 7F
04/11 21:46, 7F
嗯嗯所以lvalue reference應該還是是不能bind to xvalue 或是prvalue囉xd(混亂
→
04/11 21:46,
8月前
, 8F
04/11 21:46, 8F
→
04/11 21:46,
8月前
, 9F
04/11 21:46, 9F
→
04/11 21:46,
8月前
, 10F
04/11 21:46, 10F
→
04/11 21:46,
8月前
, 11F
04/11 21:46, 11F
→
04/11 21:46,
8月前
, 12F
04/11 21:46, 12F
→
04/11 21:46,
8月前
, 13F
04/11 21:46, 13F
→
04/11 21:46,
8月前
, 14F
04/11 21:46, 14F
→
04/11 22:10,
8月前
, 15F
04/11 22:10, 15F
謝謝,也是沒有書會這樣寫xd
※ 編輯: amamoimi (1.200.14.226 臺灣), 04/11/2024 22:35:00
推
04/11 23:10,
8月前
, 16F
04/11 23:10, 16F
→
04/11 23:10,
8月前
, 17F
04/11 23:10, 17F
推
04/11 23:16,
8月前
, 18F
04/11 23:16, 18F
→
04/11 23:16,
8月前
, 19F
04/11 23:16, 19F
也就是說obj.f()本來是rvalue,但是到g裡就被當成成lvalue了嗎!?為什麼會這樣...
→
04/12 07:53,
8月前
, 20F
04/12 07:53, 20F
→
04/12 09:57,
8月前
, 21F
04/12 09:57, 21F
→
04/12 09:57,
8月前
, 22F
04/12 09:57, 22F
※ 編輯: amamoimi (180.217.14.80 臺灣), 04/12/2024 10:19:43
→
04/12 11:38,
8月前
, 23F
04/12 11:38, 23F
→
04/12 11:38,
8月前
, 24F
04/12 11:38, 24F
→
04/12 11:40,
8月前
, 25F
04/12 11:40, 25F
→ amamoimi: 謝謝j大復原!
※ 編輯: amamoimi (140.138.31.178 臺灣), 04/12/2024 12:56:17
推
04/12 16:30,
8月前
, 26F
04/12 16:30, 26F
→
04/12 16:30,
8月前
, 27F
04/12 16:30, 27F
→
04/12 16:59,
8月前
, 28F
04/12 16:59, 28F
→
04/12 16:59,
8月前
, 29F
04/12 16:59, 29F
推
04/13 14:36,
8月前
, 30F
04/13 14:36, 30F
→
04/13 14:37,
8月前
, 31F
04/13 14:37, 31F
→
04/13 14:38,
8月前
, 32F
04/13 14:38, 32F
→
04/13 23:06,
8月前
, 33F
04/13 23:06, 33F
→
04/14 06:49,
8月前
, 34F
04/14 06:49, 34F
→
04/14 06:49,
8月前
, 35F
04/14 06:49, 35F
→
04/14 06:49,
8月前
, 36F
04/14 06:49, 36F
→
04/14 06:49,
8月前
, 37F
04/14 06:49, 37F
→
04/14 06:49,
8月前
, 38F
04/14 06:49, 38F
→
04/14 06:49,
8月前
, 39F
04/14 06:49, 39F
→
04/14 19:20,
8月前
, 40F
04/14 19:20, 40F
C_and_CPP 近期熱門文章
PTT數位生活區 即時熱門文章