![](/img/trans.png)
[英]In C++ template copy assignment operator not compatible with initializer_list?
[英]struct assignment with initializer_list in c++
我有一个结构
struct Data {
int a,b;
Data& operator=(Data &&other) = delete;
};
现在,当我调用赋值运算符时
Data A[2];
A[0] = {1, 2};
调用已删除的函数时出现编译错误。 我的问题是initializer_list如何转换为Data
类型的右值引用?
C ++ 17 [expr.ass] / 9涵盖了这种语法:
braced-init-list可能出现在右侧
- [...]
- 对类类型的对象的赋值,在这种情况下,初始化列表作为参数传递给由重载决策选择的赋值运算符函数。
给出一个例子:
z = { 1,2 }; // meaning z.operator=({1,2})
将braced-init-list作为参数赋予函数的行为意味着函数参数由该列表初始化。 在这种情况下, Data&& other
由{1, 2}
初始化。 这由[dcl.init.list] /3.4涵盖:
否则,如果
T
是引用类型,则生成由T
引用的类型的prvalue。 prvalue通过copy-list-initialization或direct-list-initialization初始化其结果对象,具体取决于引用的初始化类型。 然后使用prvalue来直接初始化参考。
因此,有一个由{1, 2}
初始化的Data
类型的prvalue,它成为operator=
参数的初始化器。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.