这个列表是如何初始化的? 我知道C++中几种初始化的方式,最近才知道为什么。但是这个代码呢
它看起来像是某种列表初始化与使用括号的construtor调用的混合。因此,我认为它将从这个列表是如何初始化的? 我知道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
{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