→ LPH66:稍微看了一下前面的 RVO 的那三篇文 12/24 18:10
→ LPH66:我這裡似乎是把兩種 RVO 混在一起講了 12/24 18:11
→ LPH66:這就有請更了解它們的人來說吧... 12/24 18:11
→ diabloevagto:他的strPtr也有問題吧? 12/24 19:52
→ diabloevagto:另外既然有RVO了,怎麼obj與obj_main兩個addr不同? 12/24 20:10
→ PkmX:樓上: 因為codepad編譯的時候加入了-fno-elide-constructors 12/24 20:47
→ diabloevagto:樓上:抱歉不太懂你的意思,不過我編譯是自己用gcc 12/24 21:12
→ PkmX:不好意思 我以為你是直接看codepad上面輸出的結果 12/24 21:21
→ PkmX:你可以講一下你的gcc版本和編譯用的參數嗎 12/24 21:22
→ PkmX:如果我沒記錯的話 gcc預設是會啟動RVO的 12/24 21:23
推 rnbjacky:大大們 我用vc++ 和 codeBlock 兩個編譯後執行結果 : 12/24 21:34
→ rnbjacky:obj和 obj_main 的位址是不一樣的 , 這樣是沒啟動RVO嗎? 12/24 21:34
→ diabloevagto:剛剛會不同是用cb編譯的,直接下g++ -o這樣就是一樣 12/24 21:56
→ diabloevagto:難道是cb預設不用RVO? 12/24 21:56
→ diabloevagto:另外想請問為何obj與obj_main兩個addr不同? 12/24 21:57
→ diabloevagto:mingw32-g++.exe -fexceptions -pedantic-errors 12/24 22:13
→ diabloevagto: -std=c++0x -Wfatal-errors -Wextra -Wall -g 12/24 22:13
→ diabloevagto:我看cb有這些參數 12/24 22:13
→ Favonia:標準沒有說要傳 y 的位置進去吧...搞不好實作用 inline xD 12/24 22:21
→ diabloevagto:抱歉上面在推的問題耍笨了,想問的是strPtr好像怪怪 12/24 22:30
→ diabloevagto:他指向一個local value? 12/24 22:30
→ diabloevagto:另外直接下g++ -o也是不一樣的位址... 12/24 22:31
→ diabloevagto:抱歉一直推文= =都推錯 12/24 22:32
→ PkmX:我覺得是mingw-gcc的implementation quality的問題 12/24 22:41
→ PkmX:上述例子linux底下gcc是會做rvo的 但是mingw-gcc不會 12/24 22:43
→ PkmX:但是如果自己寫一個copy ctor mingw-gcc就會做rvo了... 12/24 22:43
→ PkmX:另外msvc預設是不會做nrvo的 請記得開optimization XD 12/24 22:51
→ diabloevagto:我寫一個空的copy,addr就都一樣了,這樣strPtr就是 12/24 22:51
→ diabloevagto:正常的了,這樣應該就是表示RVO有用到了吧 12/24 22:51
→ PkmX:基本上第40行*strPtr的用法是十分危險的 它只向一個已經超出 12/24 22:55
→ PkmX:scope的local變數 沒炸掉是幸運剛好compiler有做NRVO XD 12/24 22:55
→ diabloevagto:確實,所以剛剛沒有RVO我一直覺得很怪... 12/24 23:05
推 rnbjacky:我會設那個指標 只是想抓local的位址來看和main的一不一 12/25 00:07
→ rnbjacky:樣而已 不是要拿來取local的值 12/25 00:08
→ diabloevagto:不要用指標直接show也可以啊... 12/25 00:11
推 rnbjacky:哦 因為我想在main裡面看 是不是有out of scope 12/25 02:01
→ rnbjacky: 還想 12/25 02:01