抱歉。使楼主产生这个疑惑,可能那天楼主问 可不可以主动调用构造函数 的那个帖子,我回答的有点技术错误。不过楼主后来展示的代码确实很奇葩,我没想太清楚。
构造函数数有它自己的语法特殊性。其中一条是:不能通过函数名调用构造函数。(析构函数没有这个语法限制)
(标准里的原话是说构造函数没有函数名,也不会在构造函数上施用函数名回查(Because constructors do not have names, they are never found during name lookup;))。
有一种称作函数式类型转换的语法,类似 int a = int(4.4)。
当然把 int 换成类的名字也是可以的,标准说这种语法会引发构造函数的调用。但引发调用的机理是类型转换,而不是函数名调用。
楼主的代码相当于:
程序代码:
int main()
{
int (a);
a = 5;
cout << a << endl;
return 0;
}
那个括号是多余的,写不写都行。
在楼主的代码里,由于形参 int 已经是 x 了,代码里又定义了一个 类A的对象,也叫 x。所以提示重定义。
这点 2楼 已经说明了。如果楼主没看明白,不知道我举的这个例子,能不能帮助理解。