c++ 返回常量“垃圾值”

iyzzxitl  于 2023-03-14  发布在  其他
关注(0)|答案(2)|浏览(180)
float& Matrix_Row::get(const unsigned int &row_indx, const unsigned int &column_indx){
    Matrix_Column* temp = head;

    while(temp){
        if(temp->row_indx == row_indx){
            return temp->get(column_indx);
        }
        temp = temp->next;
    }

    // add default return not found
}

有没有什么方法可以返回0,而不必创建特定的变量...比如有没有一种NULL值可以返回。
所以我可以在原始类中创建一个'NOT-FOUND'常量值,然后当调用这个函数时,我只是将该值作为参数添加,然后如果找不到它,我就返回该参数值;但是,我并不想这样做,因为它可能与数据变量值冲突。例如:我可以返回-1,但实际上数据值是-1,这样我就不能区分它是成功还是失败。
谢谢

9o685dep

9o685dep1#

return -〉数据对〈bool,float〉
这样我可以检查是否找到了一个值,如果没有找到,我也可以添加任何默认的浮点值。
不是最佳解决方案,因为它将比使用可选

deyfvvtc

deyfvvtc2#

问题是你是通过引用返回的。通过引用返回告诉这个方法的任何用户它将总是返回一个有效值。显然,你试图返回“NOT-FOUND”,表示没有有效值,这违反了这个规则。引用仅仅是永远不能为空的指针。指针只是指向其他现有的变量,但它们可以为空;不指向任何东西。null通常是一个很好的指示符,用于“未找到”。
一个简单的规则可以同时适用于参数和返回值:

  • 如果引用不能为空,则使用引用
  • 如果指针可以为空,则使用指针

因此,请像这样重写方法:

float* Matrix_Row::get(const unsigned int &row_indx, const unsigned int &column_indx){
    Matrix_Column* temp = head;

    while(temp){
        if(temp->row_indx == row_indx){
            return temp->get(column_indx);
        }
        temp = temp->next;
    }

    // add default return not found
    return nullptr;
}

然后调用代码可以检查nullptr的返回值作为其“NOT-FOUND”指示符。另外,我不确定return temp->get(column_indx);返回的是什么,但是您可能需要修改它以确保它返回的是float*。如果它返回的是引用,那么您可以执行return &temp->get(column_indx);以支持上述更改

相关问题