VC2010中的C++ 0x Peer构造函数

jam*_*o00 5 c++ constructor c++11

根据C++ 0x规范,以下是合法的

class A {
    A(int i) : x(i) {}
    A() : A(0) {}
    int x;
};
Run Code Online (Sandbox Code Playgroud)

但它无法"A" is not a nonstatic data member or base class of class "A"在VC 2010中编译().任何人都知道什么是错的?

In *_*ico 8

在撰写本文时,Visual C++ 2010(也称为VC++ 10.0)不支持委托构造函数,这是您的代码片段所需要的.VC++ 10.0仅部分支持C++ 0x,在撰写本文时,没有编译器实现了整个C++ 0x功能集(虽然这很快就会改变,特别是在C++ 0x标准最终确定之后).

Scott Meyers 总结了gcc和MSVC编译器中的C++ 0x支持.这是不同编译器中另一个C++ 0x功能支持列表.此外,Visual C++ 2010中支持的C++ 0x功能列表直接来自马的口.

现在,直接在构造函数的初始化列表中初始化所有成员:

class A
{ 
public:
    A(int i) : x(i) {} 
    A() : x(0) {} 
private:
    int x; 
};
Run Code Online (Sandbox Code Playgroud)

  • @jameszhao00:它"有效",因为那不是委托构造函数.你正在创建一个未命名的临时`A`,它将在构造函数完成后被破坏,这不是你想要的. (6认同)