C ++ 11中的统一初始化和默认构造函数参数

时间:2013-08-24 22:15:51

标签: c++ c++11 uniform-initialization

我正在学习新的C ++ 11功能 - 统一初始化。写了一个小程序:

#include <iostream> 
using namespace std;

class C {
public:
    C(int a = 1, int b = 2) : a_{a}, b_{b}, n{0,1,2,3,4} {};
    int n[5];
    int a_,b_;

};

int main()
{
    C c = C{}; // should call C(int a = 1, int b = 2) with default arg.
    cout << c.a_ << "  " << c.b_ << endl;
    return 0;
}

但是,我得到了意想不到的结果0 0。换句话说,一切都被初始化为零。这可能发生的唯一方法:1。调用隐式默认构造函数,或2.初始化未正确完成。 (3.编译器???)

为什么我会得到意想不到的结果?在C ++ 11中使用统一初始化的构造函数语法是否有任何更改?

编辑:使用最新的英特尔编译器:

1>------ Rebuild All started: Project: Unif_Init (Intel C++ 13.0), Configuration: Debug Win32 ------
1>  Source.cpp
1>  xilink: executing 'link'
1>  xilink: executing 'link'
1>  Unif_Init.vcxproj -> C:\Users\alex\documents\visual studio 2012\Projects\Unif_Init\Debug\Unif_Init.exe
========== Rebuild All: 1 succeeded, 0 failed, 0 skipped ==========

1 个答案:

答案 0 :(得分:3)

这是编译器中的一个错误。 C{}调用默认构造函数来创建一个临时文件,用于复制初始化对象cC(int a = 1, int b = 2)显然是默认值,因此它应该使用它。将初始化顺序切换到类帮助中声明的顺序(可能不是,但只是猜测)?似乎英特尔编译器没有考虑使用默认参数作为默认参数的ctor。

C(int a = 1, int b = 2) : n{0,1,2,3,4}, a_{a}, b_{b} {};