C++ C++;VC2010中的0x对等构造函数

C++ C++;VC2010中的0x对等构造函数,c++,constructor,c++11,C++,Constructor,C++11,根据法律,以下是合法的 class A { A(int i) : x(i) {} A() : A(0) {} int x; }; 但它无法在VC2010中编译(“A”不是非静态数据成员或类“A”的基类)。有人知道有什么不对吗?在本文中, < P> VisualC++ 2010(也称为VC++ 10)不支持委派构造函数,这是代码片段所需要的。VC++10.0仅部分支持C++0x,在撰写本文时,还没有编译器实现了整个C++0x功能集(尽管这种情况很快就会改变,尤其是在C++

根据法律,以下是合法的

class A {
    A(int i) : x(i) {}
    A() : A(0) {}
    int x;
};
但它无法在VC2010中编译(
“A”不是非静态数据成员或类“A”的基类)。有人知道有什么不对吗?在本文中,

< P> VisualC++ 2010(也称为VC++ 10)不支持委派构造函数,这是代码片段所需要的。VC++10.0仅部分支持C++0x,在撰写本文时,还没有编译器实现了整个C++0x功能集(尽管这种情况很快就会改变,尤其是在C++0x标准最终确定之后)

斯科特·梅耶斯有。这是另一张清单。也

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

class A
{ 
public:
    A(int i) : x(i) {} 
    A() : x(0) {} 
private:
    int x; 
};

Visual Studio还不支持所有0x。(不应期望任何人这样做;0x尚未最终确定。)


MSVC++2010不支持


列出了流行编译器中的C+0x功能及其支持。

可能您尚未在编译器设置中指定C++0x。这不是C++0x规范。C++0x规范仍在起草中,等待批准,与wikipedia完全不同。这是“最终委员会草案”:@jameszhao00:它“有效”,因为它不是一个授权的构造函数。您正在创建一个未命名的临时
A
,它将在构造函数完成后被销毁,这不是您想要的。这一点很好!谢谢你的澄清。太习惯Java/C了,我想:(