Fer*_*cio 10 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;
}
Run Code Online (Sandbox Code Playgroud)
这是标准的C++还是Microsoft扩展?
Ker*_* SB 11
没有; 构造函数没有名称.你不能获取构造函数的地址或传递函数指针,甚至只是像普通函数一样调用它.语法A::A()只是一种特殊的声明符语法,允许您声明和定义构造函数,但它不是名称.
也就是说,无论如何都不能输入dede 对象(包括函数指针),只能输入类型.
为了评论MSVC的行为,我引用了12.1/3:
一个typedef的名称不得使用[...]一个构造函数声明.