gpt4 book ai didi

c++ - 赋值运算符的性能

转载 作者:行者123 更新时间:2023-11-30 05:12:59 25 4
gpt4 key购买 nike

你好,我有一个 Truck 类,它只有一个 int 类型的属性。我没有在全类使用任何指针。我写了 2 个版本的 operator=:

 Truck& operator=( Truck &x)
{
if( this != &x)
{
price=x.getPrice();
}
return *this;
}

Truck operator=(Truck x)
{
if( this != &x)
{
price=x.getPrice();
}
return *this;
}

它们都可以工作,但是它们有任何性能问题吗?而且,如果我使用指针来声明我的属性,我应该坚持第一种声明吗?

最佳答案

Both of them work, but is there any performance issue with anyone of them?

您发布的两个代码示例都存在潜在的性能问题。

由于您的类只有一个 int 成员,因此编写一个用户定义的赋值运算符,无论它看起来多么好,都可能比编译器默认版本所实现的速度慢。

如果您的类不需要您编写用户定义的赋值运算符(或复制构造函数),那么最好不要自己编写这些函数,因为如今的编译器本质上知道如何优化它们自己生成的例程.

析构函数也是如此——你看到的看似无害的空析构函数几乎是下意识的 react ,它会对性能产生影响,因为它再次覆盖了编译器的默认析构函数,该析构函数经过优化可以做任何它需要的事情做。

所以最重要的是,当涉及到这些函数时,不要管编译器。如果复制/赋值函数的编译器默认版本足够,请不要通过编写您自己的版本来进行干扰。有可能写错东西(例如遗漏了您可能无法复制的成员)或做的事情比编译器产生的效率低。

关于c++ - 赋值运算符的性能,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/44189896/

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