您好我有一个类.wrapper{
display: flex;
margin: 1rem;
}
.wrapper button, input {
margin: 0 0.5rem;
}
,只有一个类型为Truck
的属性。我没有在全班使用任何指针。我写了int
的两个版本:
operator=
它们都有效,但是其中任何一个都有任何性能问题吗?而且,如果我使用指针声明我的属性,我应该坚持第一种声明吗?
答案 0 :(得分:1)
它们都有效,但任何人都有任何性能问题 它们?
您发布的两个代码示例都存在潜在的性能问题。
由于您的类只有一个int
成员,因此编写一个用户定义的赋值运算符,无论它看起来有多好,都可能比编译器默认版本的速度慢。
如果你的类不要求你编写一个用户定义的赋值运算符(或复制构造函数),那么自己编写这些函数更为明智,因为现在编译器本质上知道如何优化它们自己生成的例程。
与析构函数相同的东西 - 看起来无害的空析构函数,你看到写的几乎是一个膝盖反应可能会对性能产生影响,因为它再次覆盖了编译器的默认析构函数,它被优化为执行任何需要的操作要做。
因此,当谈到这些功能时,底线就是让编译器独立。如果编译器的默认版本的复制/赋值功能足够,请不要通过编写自己的版本进行干扰。有可能写出错误的东西(例如遗漏你可能无法复制的成员)或做一些比编译器产生的效率低的东西。
答案 1 :(得分:0)
方式1是赋值运算符的有效方法,但建议在那里传递常量引用。它返回对this
的引用,即一个轻量级指针。
方式2会降低性能。它构造并返回this
对象的副本。此外,它无效。为什么assign运算符中的引用返回是标准签名?它允许表达式
copy1 = copy2 = original;
while ((one = two).condition())
doSomething();
让我们考虑以下几点:
(copy = original).changeObject();
使用方法1,这个表达式是程序员所期望的。在第二种方式中它是不正确的:你为changeObject
调用assign运算符返回的临时对象,而不是copy
。
你可以说:“我不想使用这种丑陋的语法”。在这种情况下,只是不允许它并在operator=
中不返回任何内容。因此,建议返回this
的引用。
参见评论中的链接,它们似乎很有用。