在不影响操作数的情况下为结构重载 operator+

彼得黄

我想在不影响两个操作数的情况下重载结构的加号运算符。

这是我所做的。

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;
}

它可能工作正常,但是,我感觉不对,因为操作符返回了一个局部变量。我不确定这是否会导致内存损坏。有一个更好的方法吗?

Angew 不再以 SO 为荣

有一个更好的方法吗?

当然有,而且非常简单。加法计算一个新值。因此它应该返回一个(而不是引用):

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;
}

本文收集自互联网,转载请注明来源。

如有侵权,请联系 [email protected] 删除。

编辑于
0

我来说两句

0 条评论
登录 后参与评论

相关文章

重载Add-operator而不复制操作数

类型为'int'和'<未解析的重载函数类型>'的无效操作数为二进制'operator <<'

重载operator []并没有收到“需要左值作为赋值的左操作数”错误

错误:“operator<<”不匹配(操作数类型为“std::basic_ostream<char>”和“<unresolved重载函数类型>”)

错误:类型为'int'和'<未解析的重载函数类型>'的无效操作数为二进制'operator <<'

C ++错误:类型为'double'和<unresolved重载的函数类型'的操作数对二进制'operator'无效

'int' 和 '<unresolved 重载函数类型>' 类型的无效操作数到二进制 'operator<<'

'operator[]' 不匹配(操作数类型为 'QJsonDocument'

如何在不重载operator(),std :: less,std :: greater的情况下为std :: multiset提供自定义比较器?

= operator的重载

结构中的C ++重载operator()

解决“错误:+(“ Iterable [str]”)[operator]”不受支持的左操作数类型

'operator + ='不匹配(操作数类型为'std :: basic_ostream <char>'和'int')

'operator[]' 不匹配(操作数类型是 'std::unique_ptr<std::vector<int> >' 和 'int')

二进制“ operator +”类型为“ int *”和“ int *”的无效操作数

错误:“ operator []”不匹配(操作数类型为“ QVector <int>”和“ QCharRef”)

Swift-Binary Operator ==不能应用于两个[[Double]]操作数

错误:类型为“ double *”和“ double”的无效操作数为二进制“ operator /”

如何编写像操作数(operator(operand))这样的JS函数?

错误:“ operator +”不匹配(操作数类型为“ int”和“ class”)

与“ operator >>”不匹配(操作数类型为“ QDataStream”和“ QJsonObject”)

如何修复:错误:“operator=”不匹配(操作数类型为“Estado”和“Estado*”)

不匹配“operator=”(操作数类型为“String”和“void”)

C ++ [错误]与'operator =='不匹配(操作数类型为'Vehicle'和'const Vehicle')

'operator ='不匹配(操作数类型为'std :: vector <int>'和'int'

'int' 和 'const char [15]' 类型的无效操作数到二进制 'operator<<' ^

C ++,编译时错误“与'operator []'不匹配(操作数类型为'someClass *'和'someClass')”

错误:“operator=”不匹配(操作数类型为“PlDrustvo”和“PlDrustvo”)|

课堂上重载operator +