elv*_*kaj 18 c++ initialization c++11 list-initialization
这两个功能之间有什么显着差异吗?
struct Object {
Object(int i) : i{i}
{
}
int i;
};
Object f() { return {1}; }
Object g() { return Object{1}; }
Run Code Online (Sandbox Code Playgroud)
son*_*yao 20
第一个是复制列表初始化,Object::Object(int)将选择适当的构造函数(即)来构造返回值.
第二个将Object通过直接列表初始化(也调用Object::Object(int))构造临时,然后将其复制到返回值.由于复制省略(由C++ 17保证),这里省略了复制或移动构造.
因此,对于您的示例,它们具有相同的效果; Object::Object(int)用于构造返回值.请注意,对于第一种情况,如果构造函数是,explicit那么它将不会被使用.
direct-list-initialization(考虑显式和非显式构造函数)
copy-list-initialization(考虑显式和非显式构造函数,但只能调用非显式构造函数)
| 归档时间: |
|
| 查看次数: |
1078 次 |
| 最近记录: |