※ 本文轉寄自 ptt.cc, 文章原始頁面
看板C_and_CPP
標題

[問題] 用函數設定參照的問題

最新2023-11-15 07:47:00
留言85則留言,6人參與討論
推噓3 ( 3082 )
各位晚安打擾了 https://onlinegdb.com/_DyNuxd2H 我一直不太明白為什麼為什麼這樣寫是合法的 f(a)=5這行不是在把function call設值嗎 但是照理來說只能assign value給變數吧?(gpt這樣跟我講的,但是他又說我的例子不是 設值給f(a)@@) 不好意思我好像越問越基本了...謝謝大家 ---- Sent from BePTT on my OPPO CPH1943 -- ※ 發信站: 批踢踢實業坊(ptt.cc), 來自: 112.78.70.250 (臺灣) ※ 文章網址: https://www.ptt.cc/bbs/C_and_CPP/M.1699705889.A.42E.html

85 則留言

nh60211as, 1F
int assign to int reference 是合法的啊

sarafciel, 2F
這是左值和右值的問題 大部分function call回傳是右值

sarafciel, 3F
你這個版本的函式是回傳左值 所以可以被assign

wulouise, 4F
你只是寫了a=5啊

wulouise, 5F
你是說設值給std::function?通常是不行的

amamoimi, 6F
請問為什麼這個例子中回傳是左值呀?

amamoimi, 7F
回w大 是的 我是指f(a)=5這一行

Lipraxde, 8F
這並不是給 function call 設值,是做完 function call

Lipraxde, 9F
對 return value 設值,而這個 function return 的是

Lipraxde, 10F
int&,所以式子是合法的

amamoimi, 11F
是只有return value是參照的情況下才能設值嗎?為什麼

amamoimi, 12F
呢?

wulouise, 13F
你是設給returned ref而不是function 不要搞混了,f(a)

wulouise, 14F
是呼叫function f並取得回傳的ref

wulouise, 15F
給function設值是f = xxx,但是要看你想做什麼

sarafciel, 16F
為什麼回傳的是左值這個問題的答案在左值的定義中就能

sarafciel, 17F
找到

sarafciel, 18F
你會這樣問就代表你其實不懂什麼是左值 或者不懂什麼東

sarafciel, 19F
西會被分在左值 左右值的概念在網路上資源很多 你最好

sarafciel, 20F
找幾篇文章看一下 或是翻板上以前的文章也行 不然你大

sarafciel, 21F
概會繼續用很破碎的方式去理解

amamoimi, 22F
好的 謝謝您

Lipraxde, 23F
恩...我前面的講法不太好,不要太糾結他是 return valu

Lipraxde, 24F
e。一行程式碼不見得只做一件事,他可以有很多步驟,舉

Lipraxde, 25F
例來說 a = b * c + d:

Lipraxde, 26F
1. b * c,

Lipraxde, 27F
2. b * c 的結果加上 d,

Lipraxde, 28F
3. assign b * c + d 的結果給 a

Lipraxde, 29F
不論是 = 左邊還是右邊都要分步驟做,然後要注意 a. 動

Lipraxde, 30F
作、b. type

amamoimi, 31F
謝謝L大

amamoimi, 32F
想問一下那為什麼當傳回值是指標的時候f()也不能當左值

amamoimi, 33F
呢 指標在記憶體中有確切的位置,應該是可以當作左值的

amamoimi, 34F
不是嗎

sarafciel, 35F
指標指到的東西是左值 不代表指標本身會是左值

sarafciel, 36F

amamoimi, 37F
喔喔了解了 謝謝

amamoimi, 38F
有些東西搞混了 感謝各位

qwerasdf6102, 39F
這裡提供另一個角度 即使不用左值右值的概念 你可以

Lipraxde, 72F
一手去理解,關注在 "type" 本身就好

Lipraxde, 73F
至於左值、右值嘛...其實也不是說一定要搞懂吧,反正記

Lipraxde, 74F
著想確保是用 move 的時候用 std::move,想 forward 參

Lipraxde, 75F
數就用 std::forward,就像不會微積分也能在菜市場買菜

Lipraxde, 76F
一樣,搞不清楚左值右值還是能寫 code

qwerasdf6102, 77F
其實我當年也是從c++直接開始的啦 只是學完取值取址

qwerasdf6102, 78F
之後 對於ref 還是有點迷惑 直到認知到他就是指標

qwerasdf6102, 79F
之後才豁然開朗。 實際上我常常去看什麼code會編譯

qwerasdf6102, 80F
出什麼組語, ref 跟pointer 會編譯出一模一樣的東

qwerasdf6102, 81F
西

qwerasdf6102, 82F
回原po 編譯成指標的意思 就是他們底層實現的原理

qwerasdf6102, 83F
相同 本質上你寫語言其實都是在對硬體做一些操作

qwerasdf6102, 84F
而指標與參照做的操作是一樣的

amamoimi, 85F
好的 感謝L大和q大!

amamoimi 作者的近期文章

[問題] temporary 可以take reference 嗎?
c++新手最看了一些文章,發現一個問題,舉個例子: #include <iostream> class A{ public: int a=5; int& g(){ return a; } A f(){ return *t
[問題]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(
更多 amamoimi 作者的文章...