什么是c ++ std :: map' s null关键字?

时间:2016-04-27 07:40:12

标签: c++ dictionary

map<CString, CString> tmp()

我希望该函数在失败时返回null。 但是当我返回NULL

时会发生错误

什么是地图关键字意味着失败

2 个答案:

答案 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是一个引用,因此它将修改您作为参数提供的地图对象。

如果你真的无法更改签名,那么你就会抛出异常。