map<CString, CString> tmp()
我希望该函数在失败时返回null。 但是当我返回NULL
时会发生错误什么是地图关键字意味着失败
答案 0 :(得分:1)
只有指针可以具有值NULL
†。 std::map
不是指针。不存在表示失败的指定值。与NULL
最接近的类似物是空地图,但如果它是成功的有效结果则不能表示失败。
如果您的函数应返回地图和成功状态,那么您的函数有多个输出。您可以返回包含地图和成功状态的对象:
struct process_result {
map<CString, CString> the_map;
bool success;
}
Boost optional是这种模式的概括。
另一种回归&#34;多个值是将一些输出作为参考参数传递。
最后,你可以在失败时抛出异常。
†从c ++ 11开始。在c ++的早期版本中,NULL
只是一个整数。 std::map
也不是整数。
答案 1 :(得分:1)
您不能从此签名的函数返回null:
map<CString, CString> tmp()
你可以退回一对:
std::pair<map<CString, CString>, bool> tmp() {
map<CString, CString> map;
return std::make_pair(map, false/*here return false or true*/);
}
或在参数中返回bool和map return:
bool tmp(map<CString, CString>& retMap) {
return true;
}
retMap是一个引用,因此它将修改您作为参数提供的地图对象。
如果你真的无法更改签名,那么你就会抛出异常。