【发布时间】:2017-11-23 12:23:43
【问题描述】:
我想在不影响两个操作数的情况下为 struct 重载一个加号运算符。
这是我所做的。
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;
}
它可能工作正常,但是我感觉不对,因为运算符返回一个局部变量。我不确定这是否会导致内存损坏。有没有更好的方法来做到这一点?
【问题讨论】:
-
只需删除
&并按值返回结构。 -
在您查看下面的答案并惊慌失措之前,请知道 C++ 已经实施 NRVO 多年。如今,该标准甚至描述了它应该如何表现。尽管它并不强制实现总是这样做,但实际上大多数人确实这样做了。
-
@Peter Hwang 什么是魔法变量 N?为什么不设置另一个神奇的变量——数据成员m_len?
-
我忘了提。它是一个整数常量(如 20)。
-
你说得对。