這裏是在g ++ 4.7和vs2012(cl17)中產生不同輸出的代碼。C++:按值複製函數params在vs2012中產生兩個對象
#include <iostream>
using namespace std;
class A
{
public:
A() { cout << "1" << endl; }
~A() { cout << "2" << endl; }
};
class B : public A
{
public:
B() { cout << "3" << endl; }
~B() { cout << "4" << endl; }
};
void func(A a) {}
int main()
{
B b;
func(b);
return 0;
}
的GCC輸出是13242
,而CL輸出132242
。
爲什麼cl編譯器產生第二個A
對象,同時它在堆棧上創建一個副本,以及爲了什麼目的?
測試它在VS2010,結果是「132242」 – Apokal
鐺4.1生產「13242」 –
VS發行版只生產13242,但沒有調試版本 – billz