C++标准是否允许使用typedef来重命名构造函数
Does the C++ standard allow using a typedef to rename a constructor?
我惊讶地发现,在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名称[…]。
相关文章:
- 不命名构造函数和析构函数上的类型错误
- 用于创建命名构造函数的宏
- 重命名 win32api 函数以进行混淆
- 如何在重命名函数 (c++) 中使用变量?
- 如何通过 boost::p ython 重命名构造函数的关键字参数
- 错误:'GenericEnclosure::GenericEnclosure'命名构造函数,而不是类型
- 错误:Deck::D eck 命名构造函数而不是类型
- 'list::list'命名构造函数,而不是类型
- 命名构造函数和临时生存期延长
- 如何与命名构造函数一起处理不可复制的成员
- 通过使用构造函数重命名类来C++替代类实现
- 为什么命名构造函数是静态的
- 为什么需要使用声明命名构造函数
- C++标准是否允许使用typedef来重命名构造函数
- 错误:命名构造函数,而不是类型.使用g++4.6.1编译时
- 模板、接口(多重继承)和静态函数(命名构造函数)
- 类型' serial::serial '命名构造函数,而不是C/ c++中的类型
- 命名构造函数和new操作符
- 错误:“板::板”命名构造函数,而不是类型板::板;C++
- 如何在c++中使用构造函数委托来使用命名构造函数