关于c++构造函数和类型转换的一个简单问题

#include
using namespace std;

class A{
public:
A(){cout<<"constructed";}
A(int){cout<<"constructed by convert";}
A(A& a){cout<<"constructed by copy";}
~A(){cout<<"distructed";}
};
void foo(A){;}
int main(){
A a1;
A a2=A(2);
system("pause");
return 0;
}
以上是源代码,在声明a2时我想的时应该先申请一个临时变量调用带int参数的构造函数,在调用复制构造函数用这个临时变量来构造a2,再析构临时变量,应该输出的是constructed by convertconstructed by copydistructed,可实际上只输出了constructed by convert,为什么呢?

构造函数是自动调用的。不能直接调用构造函数。
A a2=A(2);是错的,应该改为:
A a(2);

A a2 = a;

你用的是什么编译器?在G++是没办法 通过的。很明显类型不匹配。
图片说明

你的程序没问题呀 并且我也试了一下 输出完全没问题