[問題] C++建構與解構問題

看板C_and_CPP (C/C++)作者 (hpps)時間13年前 (2012/07/30 23:54), 編輯推噓2(209)
留言11則, 5人參與, 最新討論串1/1
開發平台(Platform): ( GCC, Linux, ...) 以下程式碼: class A { public: A( int i ):v( i ) { cout << "A::A(" << i << ") called" << endl; } ~A(){ cout << "A::~A(" << v << ") called" << endl; } operator bool() { return v != 0; } private: int v; }; int main() { int i = 1; while( A a = i ) { i = 0; cout << "avocado" << endl; } cout << "vineyard" << endl; return 0; } 輸出結果: A::A(1) called avocado A::~A(1) called A::A(0) called A::~A(0) called vineyard 預期結果: A::A(1) called A::A(0) called A::~A(0) called avocado A::~A(1) called vineyard 我想問一下為什麼?? -- ※ 發信站: 批踢踢實業坊(ptt.cc) ◆ From: 1.173.162.150

07/30 23:56, , 1F
你為什麼會預期是這個結果?
07/30 23:56, 1F

07/31 00:00, , 2F
因為a的scope就是在while裡面,while的條件式一樣是
07/31 00:00, 2F

07/31 00:00, , 3F
當作外面的scope,另外在條件式內assign真不是個好
07/31 00:00, 3F

07/31 00:00, , 4F
習慣....建議用bool的就好
07/31 00:00, 4F

07/31 00:02, , 5F
另外造你的預期,也不能相同的名稱a有兩個opject
07/31 00:02, 5F

07/31 00:15, , 6F
所以第二個iteration就會有一個新的a產生?
07/31 00:15, 6F

07/31 03:48, , 7F
照你預期的結果 你希望 i = 0; 時 會產生一個新的 A ?
07/31 03:48, 7F

07/31 03:48, , 8F
基本上 i = 0; 改變的只有i 跟a 是沒有影響的
07/31 03:48, 8F

07/31 03:49, , 9F
另外 為什麼你會預期 A 的解構會發生在 avocado 前面?
07/31 03:49, 9F

07/31 08:52, , 10F
你將scope概念理解一下就okay了!加油!
07/31 08:52, 10F

07/31 11:26, , 11F
xD
07/31 11:26, 11F
文章代碼(AID): #1G5gvCRe (C_and_CPP)
文章代碼(AID): #1G5gvCRe (C_and_CPP)