2つのオペランドに影響を与えずに構造体のプラス演算子をオーバーロードしたいとします。オペランドのオーバーロード演算子+オペランドに影響を与えずに
ここに私が行ったことがあります。
struct Board {
int m_len;
int blk[BLK_MAX][BLK_MAX];
};
Board& operator+(const Board& b1, const Board& b2) {
Board ret;
for (int y = 0; y < N; y++) {
for (int x = 0; x < N; x++) {
ret.blk[y][x] = b1.blk[y][x] + b2.blk[y][x];
}
}
return ret;
}
しかし、オペレータがローカル変数を返すのでうまくいかないかもしれません。これがメモリ破壊を引き起こすかどうかはわかりません。これを行うより良い方法はありますか?
ただ、 '&'を削除し、値によって構造体を返します。 – Detonar
そして広範なコピーで答えが慌ててパニックになる前に、C++は何年もNRVOを実装していることを知っています。今日の標準では、それがどのように振る舞うべきかを記述しています。実装が常にそれを実行するよう強制するものではありませんが、実際には実際に行うことが実際に法律です。 – StoryTeller
@Peter Hwangマジック変数Nとは何ですか?そしてなぜ他の魔法の変数 - データメンバm_lenも設定されていないのですか? –