在C++中,A+=B是否比A=A+B更可取,就像++A比A++一样?
我理解"++A"前缀递增至少与"A++"后缀递增一样快。这个问题在很多地方讨论过,包括这里和这里。同样地,预计A+=B至少与A=A+B一样快,如此处所示。
我正在研究"++":
我的推断是,在最坏的情况下(可能来自复杂的对象类型) A=A+B 必须检索并存储 A 和添加 B,然后将其保存回原始的 A 位置,而 A+=B 只需将 B 添加到 A 中即可。我的推论正确吗?
预计基本类型在编译时重排为相同,并且这实际上仅适用于需要进行运算符重载的复杂对象。
这是否普遍适用于大多数命令式语言?
我理解"++A"前缀递增至少与"A++"后缀递增一样快。这个问题在很多地方讨论过,包括这里和这里。同样地,预计A+=B至少与A=A+B一样快,如此处所示。
我正在研究"++":
//From https://herbsutter.com/2013/05/13/gotw-2-solution-temporary-objects/
T T::operator++(int)() {
auto old = *this; // remember our original value
++*this; // always implement postincr in terms of preincr
return old; // return our original value
}
我的推断是,在最坏的情况下(可能来自复杂的对象类型) A=A+B 必须检索并存储 A 和添加 B,然后将其保存回原始的 A 位置,而 A+=B 只需将 B 添加到 A 中即可。我的推论正确吗?
预计基本类型在编译时重排为相同,并且这实际上仅适用于需要进行运算符重载的复杂对象。
这是否普遍适用于大多数命令式语言?
setData
和plus
和add
,使得a.add(b)
等同于a.setData(a.plus(b))
,但此时您应该真正查看A
类的文档,而不是试图从一般原则出发进行推理。) - ruakh