2
我有一个POD结构,它有很多成员,我想知道C++ 11中用来实现算术运算符的最有效的方法。在C++中有效的算术运算符重载11
该结构是用来代替数学上下文中的原语;例如:
template<typename Double>
Double calcSomething(const Double& d0, const Double& d1, const Double& d2)
{
return d0*d1 + 3*d2 - 6;
}
哪里Double
要么只是一个普通的double
,或者是一个POD结构与所有相关的运算符重载:
struct MyDouble
{
MyDouble(double a, double b) : _a(a), _b(b) {}
double _a;
double _b;
};
MyDouble operator+(const MyDouble& d0, const MyDouble& d1)
{
return MyDouble(d0._a + d1._a, d0._b + d1._b);
}
是否有实现这个一个非常好的,有效的方法C++ 11使用移动构造函数和右值引用?请记住MyDouble
可能是一个大的POD结构(即不只是两个双打)。
我想继续关于没有指向堆分配内存的结构的讨论。
如果所有的内存都包含在结构本身中,移动构造函数并不会为你做任何事情,但是你仍然有返回值优化,这可能使得隐含的副本不必要。 –
返回值优化是我应该控制的东西(即我需要编写一些代码),还是处于编译器优化的领域? – user1487088
这是一个编译器优化。 –