由用户定义的构造函数初始化
Initialization by user-defined constructor
请考虑以下程序:
#include <iostream>
struct A
{
A(int, int){ std::cout << "A(int, int)" << std::endl; }
};
A a(4,4);
A b{4,4};
A c({4,4});
int main(){ }
输出:
A(int, int)
A(int, int)
A(int, int)
演示
我感兴趣的是a
、b
和c
的初始化之间有区别吗?任何主题都是直接初始化的。
A a(4,4);
沼泽标准直接初始化。
A b{4,4};
沼泽标准直接列表初始化。由于A
没有initializer_list
构造函数,因此最终会执行与上述相同的操作。没有std::initializer_list
对象被构建或破坏。
A c({4,4});
这直接初始化了来自A
临时c
,而临时又从大括号初始化列表{4, 4}
复制列表初始化。请注意,如果A::A(int, int)
是explicit
,这将不起作用,因为在这种情况下,复制列表初始化的格式不正确,并且您没有可行的构造函数可以调用。临时的建造和破坏可以省略,而且通常是。
相关文章:
- 有没有一种代码密度较低的方法来使用非默认构造函数初始化数组?
- 如何在 C++ 中使用它的构造函数初始化 unique_ptrs 的 2D 向量?
- 在C++中使用默认构造函数初始化对象的不同方法
- 使用默认构造函数初始化对象的不同方法
- 我们可以用参数化构造函数初始化结构的数组吗?
- 有没有办法使用该类的构造函数初始化另一个类的私有部分内的对象数组?
- 类内初始化与构造函数初始化列表的顺序
- 通过 C++ 中的重载构造函数初始化未知类型的变量
- 使用复制构造函数初始化 new[]
- 如何从子类的构造函数初始化父类的私有成员
- 在构造函数初始化列表中使用 std::variant
- 使用构造函数初始化结构还是在之后设置其值更好?
- C++ 没有匹配的构造函数初始化 []
- 我正在使用dev c ++,但收到错误(C++98'array'必须由构造函数初始化)
- 使用所述填充构造函数初始化向量中的向量
- 如何同时创建一个具有两个或多个构造函数初始化的对象
- 在 new 关键字中,由默认构造函数初始化的类中的元素是否也使用 new 关键字在C++?
- 这是使用构造函数初始化数组对象的最佳方法吗?
- 内置类型的构造函数初始化
- 构造函数初始化和对象损坏