【问题标题】:How to set a string to an optional string value?如何将字符串设置为可选字符串值?
【发布时间】:2022-01-06 04:45:56
【问题描述】:

由于程序(C++)中的一些限制,我有一个案例,我将一个可选字符串分配给一个字符串变量,这会产生以下错误: error: no match for ‘operator=’ ...

这段代码是这样的:

void blah(std::experimental::optional<std::string> foo, // more parameters)
{
    std::string bar;
    if(foo)
    {
        bar = foo; //error
    }

    // more code
}

尝试:

我尝试使用以下方法将类型转换为匹配:

bar = static_cast<std::string>(foo);

最终显示此错误:

error: no matching function for call to ‘std::basic_string<char>::basic_string(std::experimental::optional<std::basic_string<char> >&)’

我想知道:

  1. 有没有办法处理这种情况?
  2. 否则这是设计限制,我必须使用其他方法而不是将可选字符串分配给普通字符串?

【问题讨论】:

标签: c++ string stdoptional


【解决方案1】:

你有几种方法:

  • /*const*/std::string bar = foo.value_or("some default value");
    
  • std::string bar;
    if (foo) {
        bar = *foo;
    }
    
  • std::string bar;
    if (foo) {
        bar = foo.value();
    }
    

【讨论】:

  • [随意跳过]一点后续,即使函数参数是可选的,函数调用总是需要一个值?
  • @DonBaka 该参数不是可选的。它是std::[experimental::]optional 类型的参数,该类型的对象可以具有持有对象或不持有对象的状态。 std::optionalstd::vector, std::string, …
  • 作为函数的第一个参数,您可能需要考虑这个“可选”参数相对于其他参数的重要性。通常,“选择加入”参数作为尾随参数更好,并使用默认值或函数重载。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2013-04-01
  • 2021-04-02
  • 2019-10-17
  • 1970-01-01
  • 1970-01-01
  • 2020-05-05
  • 2019-11-01
相关资源
最近更新 更多