C ++标准是否允许使用typedef重命名构造函数?

时间:2012-01-04 04:51:29

标签: c++ constructor typedef

我很惊讶地发现在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扩展?

1 个答案:

答案 0 :(得分:11)

没有;构造函数没有名称。您不能获取构造函数的地址或传递函数指针,甚至只是像正常函数一样调用它。语法A::A()只是一种特殊的声明符语法,允许您声明和定义构造函数,但它不是名称

也就是说,无论如何都不能输入对象(包括函数指针),只能 types

为评论MSVC行为,我引用了12.1 / 3:

  

typedef-name 不得用于构造函数声明。