看板 C_and_CPP 關於我們 聯絡資訊
開發平台(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
LPH66:你為什麼會預期是這個結果? 07/30 23:56
diabloevagto:因為a的scope就是在while裡面,while的條件式一樣是 07/31 00:00
diabloevagto:當作外面的scope,另外在條件式內assign真不是個好 07/31 00:00
diabloevagto:習慣....建議用bool的就好 07/31 00:00
diabloevagto:另外造你的預期,也不能相同的名稱a有兩個opject 07/31 00:02
hpps:所以第二個iteration就會有一個新的a產生? 07/31 00:15
hakman:照你預期的結果 你希望 i = 0; 時 會產生一個新的 A ? 07/31 03:48
hakman:基本上 i = 0; 改變的只有i 跟a 是沒有影響的 07/31 03:48
hakman:另外 為什麼你會預期 A 的解構會發生在 avocado 前面? 07/31 03:49
diabloevagto:你將scope概念理解一下就okay了!加油! 07/31 08:52
loveme00835:xD 07/31 11:26