gpt4 book ai didi

c++ - 为什么即使在允许复制省略的情况下,代码也需要具有可访问的复制/移动构造函数?

转载 作者:塔克拉玛干 更新时间:2023-11-03 00:28:20 24 4
gpt4 key购买 nike

尼可波拉斯在 his answer 中写下了以下内容所以:

Copy elision was permitted to happen under a number of circumstances. However, even if it was permitted, the code still had to be able to work as if the copy were not elided. Namely, there had to be an accessible copy and/or move constructor.]

为什么即使允许复制省略,代码也有必要(在“保证复制省略”出现之前)维护复制/移动构造函数?

为什么“guaranteed copy elision”让程序员摆脱这些要求?

最佳答案

当标准不保证(或要求)复制省略时,则不需要编译器实现它。

这意味着该标准允许编译器支持复制省略,但并不要求它们这样做。而且,在实践中,许多编译器供应商选择不实现复制省略。对于这些供应商来说,这是一个成本问题——不实现某个功能会消耗更少的开发人员精力。对于程序员(使用编译器的人)来说,这是一个实现质量问题 - 与质量较低的编译器相比,质量较高的编译器更有可能实现理想的优化,包括复制省略 - 但获取成本也更高。

随着时间的推移,随着更高质量的编译器变得更加免费(通过各种“免费”定义 - 并非所有都等同于零成本),该标准逐渐能够强制要求以前可选的更多功能。但事情并不是这样开始的。

由于复制省略是可选的,一些编译器会依赖于相关复制构造函数等的可访问性,而有些则不会。然而,符合标准要求的代码的概念,即使用一个兼容的编译器而不是另一个编译器构建,在标准中自然是不受欢迎的。因此,该标准强制要求构造函数可访问,即使允许实现省略它们也是如此。

关于c++ - 为什么即使在允许复制省略的情况下,代码也需要具有可访问的复制/移动构造函数?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/39449111/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com