你真的不想這樣做。堅持使用定義運算符的標準方法來定義值而不是指向值的指針會使所有事情變得更加清潔和易於維護。
編輯正如在評論中指出的,你甚至不能這樣做。至少有一個參數必須是類類型或對類的引用。
如果您想要避免巨大的複製操作,您應該使用C++ 11移動語義或通過類似MoveProxy
或Boost.Move支持庫的方式來模擬它們。
示例代碼:
// loads of memory with deep-copy
struct X {
int* mem;
X() : mem(new int[32]) { }
// deep-copy
X(const X& other)
: mem(new int[32]) { std::copy(other.mem, other.mem+32, this.mem); }
~X() { delete[] mem; }
X& operator=(const X& other) { std::copy(other.mem, other.mem+32, this.mem); return *this; }
X(X&& other) : mem(other.mem) { other.mem = nullptr; }
X& operator=(X&& other) { delete[] mem; this.mem = other.mem; other.mem = nullptr; return this; }
friend void swap(const X& x, const X& y)
{ std::swap(x.mem, y.mem); }
friend
X operator*(const X& x, const X& y)
{ return X(); }
};
來源
2013-05-10 14:50:09
pmr
參見http://stackoverflow.com/questions/4421706/operator-overloading – Danstahr 2013-05-10 14:41:59
的語法對象類型是正確的,但不能用於指針類型。爲你的具體情況嘗試'(* a)=(* b)*(* c);'。醜陋的,但不使用原始指針的另一個原因:)括號在技術上不是必要的,但使其更容易閱讀。 – Chad 2013-05-10 14:42:03
爲什麼指針?爲什麼不適當的對象? – 2013-05-10 14:42:35