如果使用C++11
那麼爲什麼不使用Move constructors和Move assignment operator。每當通過過載的分辨率,當一個對象從右值(x值或prvalue)相同類型的初始化,包括值
所以,這些中的一個可以用來假定mat::x
是靜態分配int
:
friend mat&& mat::operator*(const mat &a, const mat &b)
{
mat *c = new mat();
c->x = a.x * b.x;
return std::move(*c);
}
friend mat mat::operator*(const mat &a, const mat &b)
{
mat c;
c.x = a.x * b.x;
return c;
}
另外提供相應爲class mat
move constructor
和move assignment operator
。
我想確保每個編譯器都能在沒有應付的情況下進行繁殖。什麼是避免複製對象的最佳方法。
而不是operator*
使用:
void mat::Multiplication(const mat &a, const mat &b, mat &result);
{
result.x = a.x * b.x;
}
爲什麼你會永遠禁用RVO和複製省略?你能詳細說明你的實際問題嗎? –
我想確保每個編譯器的行爲都是一樣的。 –
這是不太可能出現的,每個編譯器都會編譯它的設計者決定的方式,你可能需要的唯一東西是語義被保留。 –