如何从返回类型为对的 C++ 函数返回 nullptr 等效项?

Jay*_*nha 1 c++ null return utility

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 nullptr; 
}
Run Code Online (Sandbox Code Playgroud)

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

Hum*_*ler 5

使用 optional<T>类型来表示可能不存在的状态。

如果您使用的是 C++17,这可以通过 来完成std::optional<T>,如果您使用 Boost thenboost::optional<T>等等。您甚至可以实现自己的optional. 关键是使用语义类型来指示可能有也可能没有值。

使用std::optional从C ++ 17,你的代码就变成了:

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; 
}
Run Code Online (Sandbox Code Playgroud)

尽管您可以通过返回类似哨兵的值(例如一对 )解决此问题(-1, -1),但这不是推荐的做法。这会强制检查调用者的特定标记值,这些值很容易被遗漏或遗忘——并且可能导致错误的标记值进入其他可能永远不会期望负值的算术或间接。

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