Don*_*aka 2 c++ string stdoptional
由于程序(C++)中的某些限制,我遇到了将可选字符串分配给字符串变量的情况,这会出现以下错误:\nerror: no match for \xe2\x80\x98operator=\xe2\x80\x99 ...
这段代码是这样的:
\nvoid blah(std::experimental::optional<std::string> foo, // more parameters)\n{\n std::string bar;\n if(foo)\n {\n bar = foo; //error\n }\n\n // more code\n}\nRun Code Online (Sandbox Code Playgroud)\n尝试:
\n我尝试使用以下方法将类型转换为匹配:
\nbar = static_cast<std::string>(foo);\nRun Code Online (Sandbox Code Playgroud)\n最终显示此错误:
\nerror: no matching function for call to \xe2\x80\x98std::basic_string<char>::basic_string(std::experimental::optional<std::basic_string<char> >&)\xe2\x80\x99\nRun Code Online (Sandbox Code Playgroud)\n我想知道:
\n你有几种方法:
/*const*/std::string bar = foo.value_or("some default value");
Run Code Online (Sandbox Code Playgroud)
std::string bar;
if (foo) {
bar = *foo;
}
Run Code Online (Sandbox Code Playgroud)
std::string bar;
if (foo) {
bar = foo.value();
}
Run Code Online (Sandbox Code Playgroud)