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

Does the C++ standard allow using a typedef to rename a constructor?

本文关键字:重命名 构造函数 typedef 许使用 标准 是否 C++      更新时间:2023-10-16

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

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

也就是说,无论如何都不能对对象(包括函数指针)进行类型定义,只能对类型进行类型定义。

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

构造函数声明不应使用typedef名称[…]。