我很惊讶地发现在VC ++ 10中,你可以使用typedef来改变类的构造函数的名称:
#include <iostream>
using namespace std;
class A
{
private:
typedef A alias;
public:
alias() { cout << "A ctor" << endl; }
};
int main()
{
A(); // prints "A ctor"
return 0;
}
这是标准C ++还是Microsoft扩展?
答案 0 :(得分:11)
没有;构造函数没有名称。您不能获取构造函数的地址或传递函数指针,甚至只是像正常函数一样调用它。语法A::A()
只是一种特殊的声明符语法,允许您声明和定义构造函数,但它不是名称。
也就是说,无论如何都不能输入对象(包括函数指针),只能 types 。
为评论MSVC行为,我引用了12.1 / 3:
typedef-name 不得用于构造函数声明。