作者hpps (hpps)
看板C_and_CPP
標題[問題] C++建構與解構問題
時間Mon Jul 30 23:54:50 2012
開發平台(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