显式构造函数和std :: initializer_list初始化

斯蒂芬
class P { 
    public:
explicit P( int a, int b, int c) {  
    std::cout<<"calling explicit constructor"<<"\n";
    } 

};


int main() {

P z {77,5,42}; // OK

P w = {77,5,42}; // ERROR due to explicit (no implicit type conversion allowed)

}

我认为{77,5,42}具有的隐式类型std::initialization_list<int>如果是这样的话,什么不导致变量构造失败z

巨兽

我认为{77,5,42}具有隐式类型std::initialization_list<int>

{77,5,42}本身没有类型。如果您编写,auto x = {77, 5, 42}x类型为initializer_list您的示例类型P具有显式构造函数。实际上,这意味着您必须编写:

P w = P{77, 5, 42}

或更好:

auto w = P{77, 5, 42}

如果是这样的话,什么不导致变量构造失败z

构造不会失败,因为您正在显式初始化它:P x{a, b, c}不会执行任何隐式转换,而只是使用统一的初始化语法来调用的(显式)构造函数P

本文收集自互联网,转载请注明来源。

如有侵权,请联系[email protected] 删除。

编辑于
0

我来说两句

0条评论
登录后参与评论

相关文章

来自分类Dev

std :: initializer_list构造函数和“初始化初始化”问题

来自分类Dev

列表初始化(又名统一初始化)和 initializer_list?

来自分类Dev

c ++ 11:使用显式的initializer_list对象初始化映射

来自分类Dev

类支撑初始化被误解为std :: initializer_list而不是副本构造

来自分类Dev

initializer_list在此构造函数中允许什么样的初始化?

来自分类Dev

通过std :: initializer_list初始化std :: pair在初始化std :: array时不起作用吗?

来自分类Dev

为什么使用带括号的初始化程序列表时首选std :: initializer_list构造函数?

来自分类Dev

初始化std :: initializer_list <std :: string_view>

来自分类Dev

使用直接初始化与std :: initializer_list时的不同指令

来自分类Dev

无法从<括号括起来的初始化程序列表>中推导std :: initializer_list

来自分类Dev

如何从嵌套的std :: initializer_list初始化2D C样式数组?

来自分类Dev

为什么在VS2019中初始化std :: initializer_list似乎失败

来自分类Dev

显式构造函数和嵌套的初始化列表

来自分类Dev

CTAD、initializer_list、非显式构造函数和函数调用

来自分类Dev

我可以使用std :: initializer_list而不是括号括起来的初始化程序来初始化数组吗?

来自分类Dev

我可以避免在初始化std :: initializer_list时不使用原始指针进行复制吗?

来自分类Dev

向量构造函数对:初始化列表与显式构造

来自分类Dev

稍后添加initializer_list构造函数时,使用大括号初始化语法会改变构造行为吗?

来自分类Dev

我是否需要在构造函数中显式初始化std :: unique_ptr?

来自分类Dev

如何在没有std :: initializer_list的情况下列出初始化模板化类的方法,使其具有固定的大小

来自分类Dev

std :: initializer_list构造函数

来自分类Dev

如何在 g++-10 中结合基类显式构造函数和指定初始化?

来自分类Dev

如何在不显式调用显式构造函数的情况下初始化映射?

来自分类Dev

为什么此代码将字符串初始化为单个字符,会调用initializer_list构造函数?

来自分类Dev

为什么在调用构造函数之前进行显式初始化

来自分类Dev

具有成员初始化列表的显式副本构造函数中的空值

来自分类Dev

C ++ 11:带“ = {}”的类内初始化不适用于显式构造函数

来自分类Dev

是否可以编写有助于复制初始化的显式构造函数?

来自分类Dev

如何为显式重载的构造函数启用副本初始化?

Related 相关文章

  1. 1

    std :: initializer_list构造函数和“初始化初始化”问题

  2. 2

    列表初始化(又名统一初始化)和 initializer_list?

  3. 3

    c ++ 11:使用显式的initializer_list对象初始化映射

  4. 4

    类支撑初始化被误解为std :: initializer_list而不是副本构造

  5. 5

    initializer_list在此构造函数中允许什么样的初始化?

  6. 6

    通过std :: initializer_list初始化std :: pair在初始化std :: array时不起作用吗?

  7. 7

    为什么使用带括号的初始化程序列表时首选std :: initializer_list构造函数?

  8. 8

    初始化std :: initializer_list <std :: string_view>

  9. 9

    使用直接初始化与std :: initializer_list时的不同指令

  10. 10

    无法从<括号括起来的初始化程序列表>中推导std :: initializer_list

  11. 11

    如何从嵌套的std :: initializer_list初始化2D C样式数组?

  12. 12

    为什么在VS2019中初始化std :: initializer_list似乎失败

  13. 13

    显式构造函数和嵌套的初始化列表

  14. 14

    CTAD、initializer_list、非显式构造函数和函数调用

  15. 15

    我可以使用std :: initializer_list而不是括号括起来的初始化程序来初始化数组吗?

  16. 16

    我可以避免在初始化std :: initializer_list时不使用原始指针进行复制吗?

  17. 17

    向量构造函数对:初始化列表与显式构造

  18. 18

    稍后添加initializer_list构造函数时,使用大括号初始化语法会改变构造行为吗?

  19. 19

    我是否需要在构造函数中显式初始化std :: unique_ptr?

  20. 20

    如何在没有std :: initializer_list的情况下列出初始化模板化类的方法,使其具有固定的大小

  21. 21

    std :: initializer_list构造函数

  22. 22

    如何在 g++-10 中结合基类显式构造函数和指定初始化?

  23. 23

    如何在不显式调用显式构造函数的情况下初始化映射?

  24. 24

    为什么此代码将字符串初始化为单个字符,会调用initializer_list构造函数?

  25. 25

    为什么在调用构造函数之前进行显式初始化

  26. 26

    具有成员初始化列表的显式副本构造函数中的空值

  27. 27

    C ++ 11:带“ = {}”的类内初始化不适用于显式构造函数

  28. 28

    是否可以编写有助于复制初始化的显式构造函数?

  29. 29

    如何为显式重载的构造函数启用副本初始化?

热门标签

归档