如何解决对象数组中的显式构造函数
struct Row
{
Row() { puts("default"); }
Row(const Row &other) { puts("copy"); }
Row(Row &&other) { puts("move"); }
explicit Row(int) { puts("conv. c'tor"); }
};
int main()
{
Row rs;
Row r[3] = {1,3,rs};
Row r3[3]{1,rs}; // no conversion exists
}
我知道显式构造函数不是复制初始化的候选者。但是,为什么直接初始化会出错?
还有如何在内存中分配对象数组?它和标量类型数组一样吗? 如果我关闭 elide 构造函数标志并删除显式关键字,我会首先得到 conv、move、conv、move 和 copy,第二次也是一样?有人能解释一下吗?
解决方法
表单中发生的初始化 T x = a; 以及在参数传递、函数返回、抛出异常([except.throw])、处理异常([except.handle])和聚合成员初始化([dcl.init.aggr])中称为复制初始化.
聚合成员初始化是复制初始化,而不是直接初始化。
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。