列表初始化程序和可变参数构造函数

反大象

CPP参考上的列表初始化:

否则,将分两个阶段考虑T的构造函数:

  • 将所有以std :: initializer_list作为唯一参数,或将第一个参数(如果其余参数具有默认值)作为第一个参数的构造函数进行检查,并通过重载分辨率与std :: initializer_list类型的单个参数进行匹配

  • 如果前一个阶段不产生匹配,则T的所有构造函数都将针对由braced-init-list元素组成的参数集参与重载解析,并且限制为仅允许非缩小转换。如果此阶段生成一个显式构造函数作为复制列表初始化的最佳匹配,则编译会失败(请注意,在简单的复制初始化中,根本不考虑显式构造函数)

因此,initializer_list首先考虑使用构造函数如果失败,则将列表的每个元素视为构造函数的参数。然而

#include <iostream>

using namespace std;

struct A{
    template <typename... Args> A(Args... li) { cout << sizeof...(Args) << endl;}
};

int main(){

    A a = {2,3,4};

}

输出为3,表示Args...解压缩为int, int, int为什么Args ...不是简单地initializer_list<int>设为单数,列表初始化指示的细节将是构造函数的第一种尝试类型?

伊戈尔·特兰德尼克

[temp.deduct.call] / 1模板参数推导是通过将每个函数模板参数类型(称为P)与调用的相应参数类型(称为A)进行比较,如下所述。如果删除的引用和cv修饰符从P给出std::initializer_list<P'>一些P'和参数为初始化值列表(8.5.4),然后进行扣除,而不是用于初始化列表中的每个元素,以P'作为函数模板参数类型和初始值设定元素作为其论据。否则,使用初始值设定项列表参数会导致该参数被视为非推论上下文(14.8.2.5)。

强调我的。因此,initializer_list<int>无法从类型的参数推导出构造函数的模板参数

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

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

编辑于
0

我来说两句

0条评论
登录后参与评论

相关文章

来自分类Dev

C ++ 11使可变参数构造函数了解初始化列表的初始化列表

来自分类Dev

C ++中的初始化程序列表和类初始化。我有无参数构造函数,但仍必须使用初始化列表?

来自分类Dev

在可变参数构造函数中初始化const数组

来自分类Dev

如何通过可变参数模板将多个构造函数参数转发到数组初始化器列表?

来自分类Dev

C ++ 11统一初始化:初始化列表和多参数构造函数之间的歧义?

来自分类Dev

C ++使用其他参数获取构造函数的初始化程序列表

来自分类Dev

空的初始化程序列表作为参数不会调用默认构造函数

来自分类Dev

LINQ to Entities仅支持无参数的构造函数和初始化程序

来自分类Dev

f#:LINQ to Entities仅支持无参数构造函数和初始化程序

来自分类Dev

std :: map初始化程序列表构造函数

来自分类Dev

成员构造函数引发的异常(括号初始化程序与初始化程序列表)

来自分类Dev

使默认构造函数和初始化程序列表并排工作

来自分类Dev

初始化程序列表和构造函数调用顺序

来自分类Dev

传递括号初始化程序列表参数时调用可变参数函数模板的问题

来自分类Dev

镖。子类和构造函数初始化器列表

来自分类Dev

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

来自分类Dev

-Wreorder和构造函数初始化器列表

来自分类Dev

统一初始化以调用初始化程序列表以外的构造函数

来自分类Dev

模板函数获取参数包和初始化程序列表

来自分类Dev

初始化程序与构造函数

来自分类Dev

在可变参数模板类的构造函数中初始化元组成员

来自分类Dev

在构造函数的可变参数中使用其他模板类执行模板类的初始化

来自分类Dev

在构造函数中使用可变参数初始化std :: tuple

来自分类Dev

从可变参数模板数组引用构造函数初始化双嵌套std :: array

来自分类Dev

在C ++中没有匹配的构造函数来初始化可变参数模板

来自分类Dev

没有用于初始化可变参数模板类的匹配构造函数

来自分类Dev

使用初始化程序列表将const数组引用实例化为构造函数参数,是否允许?

来自分类Dev

为什么可变参数函数不能“吃掉” C ++ 11中的列表初始化参数?

来自分类Dev

Kotlin和构造函数,初始化

Related 相关文章

  1. 1

    C ++ 11使可变参数构造函数了解初始化列表的初始化列表

  2. 2

    C ++中的初始化程序列表和类初始化。我有无参数构造函数,但仍必须使用初始化列表?

  3. 3

    在可变参数构造函数中初始化const数组

  4. 4

    如何通过可变参数模板将多个构造函数参数转发到数组初始化器列表?

  5. 5

    C ++ 11统一初始化:初始化列表和多参数构造函数之间的歧义?

  6. 6

    C ++使用其他参数获取构造函数的初始化程序列表

  7. 7

    空的初始化程序列表作为参数不会调用默认构造函数

  8. 8

    LINQ to Entities仅支持无参数的构造函数和初始化程序

  9. 9

    f#:LINQ to Entities仅支持无参数构造函数和初始化程序

  10. 10

    std :: map初始化程序列表构造函数

  11. 11

    成员构造函数引发的异常(括号初始化程序与初始化程序列表)

  12. 12

    使默认构造函数和初始化程序列表并排工作

  13. 13

    初始化程序列表和构造函数调用顺序

  14. 14

    传递括号初始化程序列表参数时调用可变参数函数模板的问题

  15. 15

    镖。子类和构造函数初始化器列表

  16. 16

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

  17. 17

    -Wreorder和构造函数初始化器列表

  18. 18

    统一初始化以调用初始化程序列表以外的构造函数

  19. 19

    模板函数获取参数包和初始化程序列表

  20. 20

    初始化程序与构造函数

  21. 21

    在可变参数模板类的构造函数中初始化元组成员

  22. 22

    在构造函数的可变参数中使用其他模板类执行模板类的初始化

  23. 23

    在构造函数中使用可变参数初始化std :: tuple

  24. 24

    从可变参数模板数组引用构造函数初始化双嵌套std :: array

  25. 25

    在C ++中没有匹配的构造函数来初始化可变参数模板

  26. 26

    没有用于初始化可变参数模板类的匹配构造函数

  27. 27

    使用初始化程序列表将const数组引用实例化为构造函数参数,是否允许?

  28. 28

    为什么可变参数函数不能“吃掉” C ++ 11中的列表初始化参数?

  29. 29

    Kotlin和构造函数,初始化

热门标签

归档