21得票3回答
使用C++17中的空列表初始化构造函数时出现编译错误

当尝试转移到C++17时,我遇到了一个奇怪的问题。问题在于,在默认构造函数的情况下,某些东西(我不确定是什么)在C++17中发生了改变,导致列表初始化的工作方式发生了变化。我试图搜索https://en.cppreference.com/w/cpp/language/list_initiali...

45得票1回答
等号在大括号初始化中有区别吗?例如,'T a = {}'与'T a{}'有何不同?

以下是在C++11中初始化变量的两种方法: T a {something}; T a = {something}; 我测试了所有我能想到的情况,但是我没有注意到任何区别。这个答案表明两者之间存在细微差别: 对于变量,我对T t = { init };或T t { init };风格不太...

13得票1回答
启用默认的初始化列表构造函数

我认为现代C++的初始化列表非常有用,可以用于初始化对象,甚至可以省去定义自己的构造函数的需要: struct point { float coord[3]; }; point p = {1.f, 2.f, 3.f}; // nice ! 然而,当我的类继承自另一个类时,这种方...

14得票1回答
复制省略在列表初始化中的应用,在标准文档中有明确说明吗?

在[dcl.init]/17.6中,明确写道对于括号初始化的情况,会发生复制省略: 如果初始化表达式是prvalue,并且源类型的cv-unqualified版本与目标类相同,则使用初始化表达式来初始化目标对象。例如:T x = T(T(T()));调用T的默认构造函数来初始化x。 但是,...

15得票1回答
为什么 Foo({}) 调用的是 Foo(0) 而不是 Foo()?

从代码中生成的可执行文件由clang 3.5.0和gcc 4.9.1生成。 #include <iostream> struct Foo { Foo() { std::cout << "Foo()" << std::endl; } Foo(i...

51得票1回答
左边的大括号在变量声明中的含义是什么,例如在 T {x} = y 中?

这个GitHub文件中的代码使用了一种我不熟悉的C++变量"声明"语法。 std::unique_ptr<CRecentFileList> {m_pRecentFileList} = std::make_unique<CRecentFileList>(... (m...

10得票1回答
复制列表初始化在概念上是否调用复制构造函数?

在C++11之前,我们可以通过编写类似于A a = 1;的内容来进行复制初始化,这或多或少等同于A a = A(1);。也就是说,首先创建一个临时变量,然后调用复制构造函数。无论如何,概念上都必须如此,并且复制构造函数必须可访问。 在C++11中使用列表初始化,我们可以通过编写A a = {...

8得票1回答
将初始化列表放在括号中的影响是什么?

把初始化列表放在括号里对代码有什么影响?它只是另一种列表初始化的形式,还是只适用于特定情况? 例如,考虑变量a: struct A { A(float a, float b) {} }; int main() { A b(1.0f, 0.0f); // Direct in...

13得票1回答
C++11列表初始化的不同行为

请考虑以下代码:class A { private: std::string s; public: A() = delete; A(const A&) = delete; A(A&&) = delete; A(const std::string &a...

123得票7回答
如何在成员初始化列表中初始化数组成员

class C { public: C() : arr({1,2,3}) //doesn't compile {} /* C() : arr{1,2,3} //doesn't compile either {} */ private: int arr[3]; };...