You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何检查两个矩阵的尺寸是否满足相加条件?附无报错实现代码

如何在矩阵加法运算符中检查尺寸匹配

嘿,你的代码目前能运行,但确实缺少了矩阵相加最关键的前置检查——两个矩阵必须是同尺寸(这里是同阶方阵)才能相加。如果传入一个不同尺寸的矩阵,你的代码会直接访问超出数组范围的内存,这会导致未定义行为(可能崩溃,也可能得到错误结果)。

下面是修改后的代码,加入了尺寸检查的逻辑:

#include <stdexcept> // 需要包含这个头文件来使用异常类

matrix operator+(const matrix & mat){
    // 第一步:检查两个矩阵的尺寸是否匹配
    if (this->mSize != mat.mSize) {
        throw std::invalid_argument("矩阵尺寸不匹配,无法执行加法操作");
    }

    matrix add;
    add.mSize = mat.mSize;
    add.mP = new int[add.mSize * add.mSize];
    
    for(int i = 0; i < add.mSize * add.mSize; i++){
        add.mP[i] = mP[i] + mat.mP[i];
    }
    
    return add;
}

关键说明:

  • 尺寸检查逻辑:在执行加法前,先对比当前对象(this)和传入矩阵(mat)的mSize,如果不相等就抛出异常。这样调用者可以通过try-catch块捕获这个错误,避免程序崩溃。
  • 异常选择:这里用std::invalid_argument是因为传入的参数(不同尺寸的矩阵)不符合加法的要求,属于非法参数。
  • 替代方案:如果你不想用异常,也可以选择返回一个空矩阵(比如把add.mSize设为0,add.mP设为nullptr),但异常处理是更规范的错误处理方式,能让调用者明确知道哪里出了问题。

另外,记得你的matrix类要正确实现析构函数、拷贝构造函数和拷贝赋值运算符(遵循Rule of Three),否则会有内存泄漏的风险哦。

内容的提问来源于stack exchange,提问作者user9664805

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.05.25 06:42:47