理解早期 C 11 草案中缺乏默认移动语义
在 C 11 标准的早期阶段,程序员质疑为什么编译器不会自动生成默认的移动构造函数和赋值运算符。这引起了那些寻求利用 POD 类型和 STL 容器的移动语义而不需要显式实现的人的担忧。
隐式移动语义的历史原因
隐式移动语义的驱动源于在不可移动对象上使用 std::move 的固有安全性,它有效地利用了赋值运算符。然而,这种做法在早期的 C 11 草案中存在局限性。
当前标准中的隐式移动语义
最新的 C 标准(N3225)修改了隐式移动语义的条件移动构造函数和赋值运算符的生成。目前,如果满足以下条件,编译器将隐式声明移动构造函数:
解决早期草案中缺乏移动语义的问题
最初,对于早期 C 11 草案中缺乏隐式移动语义的问题没有明确的解决方法。然而,最新的标准变化为自动移动生成提供了必要的条件。
结论
C 11 中隐式移动语义的演变解决了开发人员寻求的关注搬家作业方便、安全。通过了解历史原因和当前标准要求,程序员可以在代码中有效地利用移动语义。
以上是为什么早期的 C 11 草案不包含隐式移动语义?的详细内容。更多信息请关注PHP中文网其他相关文章!