提问者:小点点

如何从返回类型为pair的C++函数返回等价的空值?


pair<int, int> findEmpty(int bo[9][9], int n){
    for(int i=0;i<n;i++){
        for(int j=0;j<n;j++){
            if(bo[i][j]==0){
                return (make_pair(i, j));
            }
        }
    }
    //return NULL; 
}

如果不能返回NULL,有什么替代方法?


共1个答案

匿名用户

使用选项类型表示可能不存在的状态。

如果您使用的是C++17,则可以使用std::optional<;t>,如果您使用Boost,则可以使用Boost::optional<;t>等。您甚至可以实现自己版本的optional。 关键是要使用一个语义类型来指示可能存在值,也可能不存在值。

使用C++17中的std::optional,您的代码将变为:

optional<pair<int, int>> findEmpty(int bo[9][9], int n){
    for(int i=0;i<n;i++){
        for(int j=0;j<n;j++){
            if(bo[i][j]==0){
                return make_pair(i, j);
            }
        }
    }
    return nullopt; 
}

虽然您可以通过返回一对(-1,-1)等类似sentinel的值来解决这个问题,但这不是推荐的做法。 这将强制检查调用方上的特定哨兵值,这些哨兵值很容易被遗漏或遗忘--并可能导致错误的哨兵值进入其他算术或间接方向,而这些算术或间接方向可能永远不会期望负值。

使用语义类型来传达可为空性有助于防止这类错误。

相关问题


MySQL Query : SELECT * FROM v9_ask_question WHERE 1=1 AND question regexp '(返回|类型|pair|c++|函数|返回|等价|空|值)' ORDER BY qid DESC LIMIT 20
MySQL Error : Got error 'repetition-operator operand invalid' from regexp
MySQL Errno : 1139
Message : Got error 'repetition-operator operand invalid' from regexp
Need Help?