[問題] 關於 return value optimization的問題
最近讀的書上有個範例程式碼
https://onlinegdb.com/f93sPV8B2
書上有給Turbo C++ 和Symantec C++ 的run
(那本書蠻老了)
總之turbo是在104行呼叫reserve函數的時候有呼叫copy constructor
而symantec沒有(查了一下才知道rvo,應該沒錯(?))
沒有rvo的版本因為函數return後tmp就被解構了所以c3的str沒辦法正確印出
書上有提供的解法是我在class裡定義(目前是用標注)的=運算子多載
問題點1.
沒有rvo(turbo)的版本,應該是要用 Charstr operator=(Charstr inobj)
?(即不用reference)
因為reverse 的傳回值不是左值(?
因為我用的編譯器是有rvo的所以也不知道這樣對不對...
問題點2.
我目前用的是環境dev c++,拿這個程式去編譯會是有rvo
試著把註明裡的部分加上去看看
結果過不了...
用
Charstr operator=(Charstr inobj)
也過不了
請問這是為什麼呢?
新手無知...不好意思,謝謝
----
Sent from BePTT on my OPPO CPH1943
--
※ 發信站: 批踢踢實業坊(ptt.cc), 來自: 1.200.243.113 (臺灣)
※ 文章網址: https://www.ptt.cc/bbs/C_and_CPP/M.1705843485.A.C6E.html
推
01/21 23:12,
10月前
, 1F
01/21 23:12, 1F
→
01/21 23:13,
10月前
, 2F
01/21 23:13, 2F
推
01/22 22:02,
10月前
, 3F
01/22 22:02, 3F
→
01/22 22:02,
10月前
, 4F
01/22 22:02, 4F
→
01/22 22:02,
10月前
, 5F
01/22 22:02, 5F
→
01/22 22:02,
10月前
, 6F
01/22 22:02, 6F
→
01/22 22:02,
10月前
, 7F
01/22 22:02, 7F
→
01/22 22:02,
10月前
, 8F
01/22 22:02, 8F
→
01/22 22:02,
10月前
, 9F
01/22 22:02, 9F
→
01/22 22:02,
10月前
, 10F
01/22 22:02, 10F
→
01/22 22:02,
10月前
, 11F
01/22 22:02, 11F
謝謝樓上兩位大大 對我之前搞錯了...不管哪個版本c2.reverse()都在賦值給c3之後被解構
了(但是dev c++可以output 出正常的array(咦?))
還有運算子的部分還是很迷惑 我試了一下如果把copy constuctor刪掉,用非參照的方式多
載=就過的了了(當然還是印不出array)
到底發生了什麼事...
※ 編輯: amamoimi (1.200.243.113 臺灣), 01/23/2024 07:48:17
推
01/24 11:23,
10月前
, 12F
01/24 11:23, 12F
C_and_CPP 近期熱門文章
PTT數位生活區 即時熱門文章