Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/jquery/76.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
这个列表是如何初始化的? 我知道C++中几种初始化的方式,最近才知道为什么。但是这个代码呢_C++_Initialization_Language Lawyer_List Initialization_Copy Elision - Fatal编程技术网

这个列表是如何初始化的? 我知道C++中几种初始化的方式,最近才知道为什么。但是这个代码呢

这个列表是如何初始化的? 我知道C++中几种初始化的方式,最近才知道为什么。但是这个代码呢,c++,initialization,language-lawyer,list-initialization,copy-elision,C++,Initialization,Language Lawyer,List Initialization,Copy Elision,它看起来像是某种列表初始化与使用括号的construtor调用的混合。因此,我认为它将从{1,“2”}创建一个a的临时实例,然后调用复制构造函数。但事实并非如此。相反,它的行为类似于列表初始化。也许我只是被语法弄糊涂了,它是列表初始化 如果是,这里的语法是如何工作的?如果不是,这是什么样的初始化 因此,我认为它将从{1,“2”}创建一个a的临时实例,然后调用复制构造函数 你说得对。在这里,对象a是通过构造函数a::a(intx,std::string y)直接初始化的,因为 您可以使用-fno

它看起来像是某种列表初始化与使用括号的construtor调用的混合。因此,我认为它将从
{1,“2”}
创建一个
a
的临时实例,然后调用复制构造函数。但事实并非如此。相反,它的行为类似于列表初始化。也许我只是被语法弄糊涂了,它是列表初始化

如果是,这里的语法是如何工作的?如果不是,这是什么样的初始化

因此,我认为它将从
{1,“2”}
创建一个
a
的临时实例,然后调用复制构造函数

你说得对。在这里,对象
a
是通过构造函数
a::a(intx,std::string y)
直接初始化的,因为

您可以使用
-fno elide构造函数
选项进行编译(使用C++17之前的模式,因为C++17保证了这种复制省略),您将获得

normal
copy
A({1,2})
实际上是使用大括号init list代替构造函数参数的地方。

它看起来像是某种列表初始化与使用括号的构造函数调用的混合。所以我认为它会创建一个来自{1,“2”}的临时实例,然后调用复制构造函数。我同意,但你忘了。;-)
normal
normal
copy