首页 > 解决方案 > 花括号初始化如何工作?

问题描述

首先,我发现术语“初始化列表”用于两个看似不同的事物:使用像这样的花括号初始化类Foo foo{1}和使用这样的语法编写构造函数Foo::Foo(int test) : m_test(test)。这两个是有联系的还是我只是把事情搞混了?

现在到我的实际问题。我读过花括号初始化不允许缩小。然而,这不可能是唯一的区别。

struct Test {
    int one;
    int two;
};

int main() {
    Test test{1, 2};
}

此代码有效,即使在Test::Test(int,int)任何地方都没有声明。那么花括号初始化与普通初始化到底有什么不同呢?它只是语法糖,还是有更深层次的原因来解释它的存在?

标签: c++oopinitialization

解决方案


推荐阅读