gpt4 book ai didi

c++ - 按值显式复制构造函数或隐式参数

转载 作者:塔克拉玛干 更新时间:2023-11-02 23:46:57 24 4
gpt4 key购买 nike

我最近读到(不幸的是忘了在哪里),写 operator= 的最佳方式是这样的:

foo &operator=(foo other)
{
swap(*this, other);
return *this;
}

而不是这个:

foo &operator=(const foo &other)
{
foo copy(other);
swap(*this, copy);
return *this;
}

想法是,如果使用右值调用 operator=,则第一个版本可以优化拷贝的构造。因此,当使用右值调用时,第一个版本更快,而当使用左值调用时,这两个版本是等效的。

我很好奇其他人对此有何看法?人们会因为缺乏明确性而避免使用第一个版本吗?我是否正确认为第一个版本可以更好而且永远不会更糟?

最佳答案

您可能从以下位置阅读它:http://cpp-next.com/archive/2009/08/want-speed-pass-by-value/

我没有太多要说的,因为我认为链接很好地解释了基本原理。有趣的是,我可以确认第一种形式导致我使用 MSVC 构建的拷贝更少,这是有道理的,因为编译器可能无法对第二种形式进行复制省略。我同意第一种形式是一种严格的改进,绝不会比第二种形式差。

编辑:第一种形式可能不那么惯用,但我认为它并不那么清晰。 (IMO,这并不比第一次看到赋值运算符的 copy-and-swap 实现更令人惊讶。)

编辑 #2:糟糕,我是想写复制省略,而不是 RVO。

关于c++ - 按值显式复制构造函数或隐式参数,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/2034635/

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