CPP 默认构造函数和成员初始化列表
cpp default constructor and member initialization list?
class test
{
public:
test(int x)
{
val = x;
}
private:
int val;
};
test t(3);
我得到了关于这段代码的 2 分。
test t(3)
会先调用默认构造函数,然后再执行val = 3
如果至少存在用户定义的构造函数,则编译器不会生成隐式默认构造函数
有矛盾吗?
test t(3);
正在调用参数化的构造函数(参数为 3(而不是默认构造函数。是的,如果您使用参数定义单个构造函数,则编译器不会生成 dfault 构造函数。
test t(3)
会先调用默认构造函数,然后再执行val = 3
不调用默认构造函数。 val
在 test
构造函数主体之前默认初始化;如果val
是具有默认构造函数的类型,则将调用该构造函数。但是int
没有构造函数,默认初始化只是让它处于未初始化状态,值不确定。
也许你在想这可能会调用test
的默认构造函数。它没有;test
的任何构造函数都不会这样做,除非您显式委托给该构造函数。
如果至少存在用户定义的构造函数,则编译器不会生成隐式默认构造函数
这是正确的,声明任何构造函数都会阻止隐式默认构造函数。
有矛盾吗?
不。 test
没有默认的构造函数,但这里没有任何东西试图使用这样的东西。
不,自定义构造函数不调用无参数构造函数,因此并不矛盾。
您可能将两件事混合在一起 - 每个构造函数都调用一个基类构造函数(默认的,或者如果您指定参数,则调用其他一些构造函数(。
相关文章:
- C++类 - 初始化列表 - 递归 - 按值传递
- 在初始化列表之外手动调用基类的构造函数
- C++:带有大括号初始化列表的函数调用表达式 - 标准是否规定在单个元素列表的微不足道的情况下忽略大括号?
- std::map与谓词与初始化列表
- 类内初始化与构造函数初始化列表的顺序
- 当返回语句时,逗号运算符、大括号初始化列表和 std::unique_ptr 组合在一起
- 使用初始化列表填充C++中的多维结构数组时出现问题
- 如何在初始化列表中的构造函数之后初始化变量/对象?
- C++初始化列表与分配值
- C++初始化列表中的向量集大小或调整大小
- 在构造函数初始化列表中使用 std::variant
- emplace_back初始化列表错误,当初始化列表在独立变量上工作时
- 解释了构造函数成员初始化列表
- 使用初始化列表时如何获取私有数据?
- 用初始化列表和超类构造函数声明子类构造函数的正确方式
- 如何在成员初始化列表中声明共享指针
- 庞大的初始化列表,如何修复"fatal error C1060: compiler is out of heap space"
- 我可以检查初始化列表中设置的构造函数主体中的变量吗
- 使用整数初始化列表初始化长双精度的向量
- 是否可以在C++中使用初始化列表设置数组的特定成员?