我不知道该怎么办才能在C++中实现此功能。

目的是:

pair<int, int> foo() {
  if(cond) {
    return std::make_pair(1,2);
  }
  return NULL; //error: no viable conversion from 'long' to 'pair<int, int>
}
void boo() {
  pair<int, int> p = foo();
  if (p == NULL) { //error: comparison between NULL and non-pointer ('int, int' and NULL)
    // doA
  } else {
    int a = p.first;
    int b = p.second;
    // doB
  }
}

由于我不能在C++中使用return NULL,因此这是我的第二种尝试:
pair<int, int>* foo() {
  if(cond) {
    return &std::make_pair(1,2); //error: returning address of local temporary object)
  }
  return nullptr;
}
void boo() {
  pair<int, int>* p = foo();
  if (p == nullptr) {
    // doA
  } else {
    int a = p->first;
    int b = p->second;
    // doB
  }
}

能够返回一对和空值的正确方法是什么?

最佳答案

尝试通过引用将一对传递给foo(),然后从该函数返回 bool 值,指示成功或失败。像这样:

bool foo(pair<int, int>& myPair) {
  if(cond) {
    myPair = std::make_pair(1,2);
    return true;
  }
  return false;
}
void boo() {
  pair<int, int> myPair;
  if (!foo(myPair)) {
    // doA
  } else {
    int a = myPair.first;
    int b = myPair.second;
    // doB
  }
}

编辑:根据您的操作,您应该尽可能地杀死foo()并评估cond中的boo()
void boo() {
  pair<int, int> myPair;
  if (!cond) {
    // doA
  } else {
    myPair = std::make_pair(1,2);
    int a = myPair.first;
    int b = myPair.second;
    // doB
  }
}

10-02 06:36