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

Posted

技术标签:

【中文标题】VC2010 中的 C++0x 对等构造函数【英文标题】:C++0x Peer Constructor in VC2010 【发布时间】:2010-10-03 02:24:31 【问题描述】:

根据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")。有人知道出了什么问题吗?

【问题讨论】:

可能你没有在编译器设置中指定 c++0x。 那不是 C++0x 规范。 C++0x 规范仍处于草稿阶段,等待批准,看起来与***完全不同。这是“最终委员会草案”:open-std.org/jtc1/sc22/wg21/docs/papers/2010/n3092.pdf 【参考方案1】:

在撰写本文时,Visual C++ 2010(也称为 VC++ 10.0)不支持委托构造函数,而这是您的代码 sn-p 所需要的。 VC++ 10.0 仅部分支持 C++0x,在撰写本文时,还没有编译器实现整个 C++0x 功能集(尽管很快就会改变,尤其是在 C++0x 标准最终确定后)。

斯科特迈耶斯有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; 
;

【讨论】:

@jameszhao00:它“有效”,因为这不是委托构造函数。您正在创建一个未命名的临时 A,一旦构造函数完成,它将被销毁,这不是您想要的。 好点!谢谢你的澄清。太习惯了 Java/C# 我猜 :( Compiler support for upcoming C++0x【参考方案2】:

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

This describes what 0x features are implemented in VS 2010.

【讨论】:

【参考方案3】:

MSVC++ 2010 不支持delegating constructor

This page 列出了 C+ 0x 特性及其在流行编译器中的支持。

【讨论】:

以上是关于VC2010 中的 C++0x 对等构造函数的主要内容,如果未能解决你的问题,请参考以下文章

C ++ 0x移动构造函数陷阱[关闭]

继承构造函数是不是适用于 C++0x 中的模板?

复制构造函数中的c ++用户定义成员

在 C++0x 中,非静态数据成员初始化器会覆盖隐式复制构造函数吗?

为啥 std::exception 在 VC++ 中有额外的构造函数?

C ++中的结构构造函数?