看板 C_and_CPP 關於我們 聯絡資訊
請教大家 假設因為某需求,須在函數一開始執行一些程式碼, 在函數結束後執行 inverse 的程式碼。 舉簡單例子(大概的程式碼,沒編譯,語法可能錯) class A { public: static int x; class B { public: static int &x; // 假設在 cpp 已經把他變成 A::x 的引用了。 B() { ++x; } ~B() { --x; } }; int run { B temp; 接下來進行許多與 x 有關的計算,可能會,也可能不會改變 x 的值。 但絕對不會寫到關於 B temp 的程式碼。 return x; } }; 因為我是想讓解構的時候去執行 inverse 的動作, 但只能在函數return已經結束後執行。 想請問有沒有可能哪個編譯器 會因為中間運算沒有寫到 B temp 而去把 B temp 提前 release 或根本不產生嗎? 手邊編譯器實驗過是不會。 謝謝大家 -- ※ 發信站: 批踢踢實業坊(ptt.cc) ◆ From: 123.110.136.52
diabloevagto:你如果不想要temp被opt,可以用volatile 02/23 00:17
purpose:既然B是在stack建立的物件,自然是離開 run scope 才 dtor 02/23 00:22
purpose:打錯,既然 "temp" 02/23 00:23
diabloevagto:都沒用到,有可能會被opt掉吧 02/23 00:31
applecool:被最佳化掉整個結果會不一樣耶 02/24 21:35
diabloevagto:我說的最佳化是說如果都沒用到有可能拿掉,跟這個可 02/24 22:13
diabloevagto:能沒有關係 02/24 22:15
diabloevagto:沒用到的定義是說,compiler會有warning說unuse 02/24 22:15