我不知道该怎么办才能在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
}
}