![](/img/trans.png)
[英]How to return nullptr equivalent from a C++ function whose return type is pair?
[英]How to return null from a function whose return type is map in Visual C++?
我想从返回类型为map的函数中返回空数据。
这是我的代码。
map<string, string> something_to_do(string something) {
// something to do..
// if above code is something wrong, it should return null.
return null;
}
但是,似乎没有类型转换可以在地图库中返回null。
我该怎么做?
(对不起我的英语不好。。。)
作为替代方案,您可以在C ++ 17中使用std::optional
std::optional<std::map<string,string>> something_to_do(string something) {
std::map<std::string,std::string> yourmap;
yourmap["a"] = "b";
...
return yourmap;
// or
// return std::null_t;
}
...
auto d = something_to_do(something);
if (d)
{
auto& m = d.value();
std::cout << m["a"] << std::endl;
}
如果该函数返回一个map
,则必须返回一个map
-您不能返回nullptr
(当然,这是一个空map
,但这与您将得到的接近)。 也许您正在寻找std::optional
以便您可以让函数返回一个可能存在或可能不存在的可选映射?
我认为抛出异常可以更好地处理您正在寻找的功能。
这样,您可以照常进行,但是如果出现问题(如您在注释中提到的那样),则您想抛出一个异常并让任何客户端代码相应地处理该异常。 请参阅此SO帖子 。
它使您可以编写简单明了的代码,而无需为运行代码的每种可能情况返回自定义类型。 它还消除了仅为了处理任何错误而检查返回的某些值的需要。
要调用该函数并处理错误,您只需将方法调用包装在try-catch
块中:
来自@nsanders的原始答案
try { compare( -1, 3 ); } catch( const std::invalid_argument& e ) { // do stuff with exception... }
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.