gpt4 book ai didi

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

转载 作者:太空狗 更新时间:2023-10-29 21:23:22 27 4
gpt4 key购买 nike

我正在学习新的 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 ==========

最佳答案

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

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

关于c++ - C++11 中的统一初始化和默认构造函数参数,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/18423677/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com