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
這是一個編譯器優化。 –