c++11 - 对象数组中的显式构造函数
问题描述
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, 3, rs}; // no conversion exists
}
我知道显式构造函数不是复制初始化的候选者。但是,直接初始化怎么会出错呢?
还有如何在内存中分配对象数组?它和标量类型的数组一样吗?如果我关闭 elide 构造函数标志并删除显式关键字,我会先得到 conv、move、conv、move 和 copy,第二个也是一样的?有人可以解释一下吗?
解决方案
以 T x = a 形式发生的初始化;以及在参数传递、函数返回、抛出异常([except.throw])、处理异常([except.handle])和聚合成员初始化([dcl.init.aggr])中称为复制初始化.
聚合成员初始化是复制初始化,而不是直接初始化。
推荐阅读
- scala - 如何根据开始日期列选择不同列的部分并合并到单个列中
- node.js - 如何从 s3 存储桶解析 CSV 以在 javascript AWS Lambda 函数中使用
- ios - 使用 UIView.animate 的屏幕过渡效果
- windows - 从 Windows 容器中的应用程序访问 Docker 机密
- python - 如何在 Airflow 中组合多个 DAG
- node.js - 从 DynamoDB 查询多个项目
- sql-server - 针对多个表之一的 SQL Server 外键
- git - 如何删除意外的双重提交 [Git]
- javascript - 我需要创建一个加载更多按钮来加载它被点击的 4 个项目。加载所有项目后,将显示重置按钮并重置页面
- .net - 将函数从 Code Fluent 转换为 Entity Framework