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

5
根据C++0x规范,以下内容是合法的。
class A {
    A(int i) : x(i) {}
    A() : A(0) {}
    int x;
};

在VC 2010中,它无法编译("A"不是类"A"的非静态数据成员或基类)。有人知道是什么问题吗?


也许你没有在编译器设置中指定c++0x。 - JoshD
4
这并非C++0x规范。 C++0x规范仍处于草案阶段,等待批准,并且与维基百科上的内容完全不同。这是“最终委员会草案”: http://www.open-std.org/jtc1/sc22/wg21/docs/papers/2010/n3092.pdf - Ben Voigt
3个回答

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; 
};

6
这段话的意思是:“它‘起作用’是因为那不是一个委托构造函数。你正在创建一个无名临时对象A,一旦构造函数结束就会被销毁,这不是你想要的。” - In silico
好的观点!谢谢你的澄清。我想我太习惯Java/C#了 :( - jameszhao00
编译器支持即将到来的C++0x - Roger Pate

0

0

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接