根据C++0x spec,以下是合法的
class A {
A(int i) : x(i) {}
A() : A(0) {}
int x;
};
但它无法在VC 2010中编译("A" is not a nonstatic data member or base class of class "A"
)。任何人都知道什么是错的?
答案 0 :(得分:8)
Visual C ++ 2010(也称为VC ++ 10.0)不支持委托构造函数,这是您的代码片段所需要的。 VC ++ 10.0仅部分支持C ++ 0x,在撰写本文时,没有编译器实现了整个C ++ 0x功能集(虽然这很快就会改变,特别是在C ++ 0x标准最终确定之后)。
Scott Meyers有a summary of C++0x support in gcc and MSVC compilers。这是C++0x feature support in different compilers的另一个列表。另外,a list of C++0x features supported in Visual C++ 2010 straight from the horse's mouth。
现在,直接在构造函数的初始化列表中初始化所有成员:
class A
{
public:
A(int i) : x(i) {}
A() : x(0) {}
private:
int x;
};
答案 1 :(得分:0)
Visual Studio尚不支持所有0x。 (并且没有人应该这样做; 0x没有最终确定。)
答案 2 :(得分:0)
MSVC ++ 2010不支持delegating constructor
This page列出了C + 0x功能及其在热门编译器中的支持。