Здесь код, который производит разные выходные данные в g++ 4.7 и vs2012 (cl17).
#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
, пока он делает копию в стеке и с какой целью?