gpt4 book ai didi

c++ - 使用 std::optional 参数调用函数

转载 作者:可可西里 更新时间:2023-11-01 16:30:04 25 4
gpt4 key购买 nike

我有一个函数,其签名是:

void func(std::optional<std::string> os = std::nullopt);

(我使用别名 std::experimental::optional 直到 std::optional 正式可用。)

但是,我很难清楚地调用它。编译器将拒绝执行两个隐式转换 ( const char*std::stringstd::optional<std::string> ) 以使用原始 C 字符串文字调用它。我可以这样做:

func(std::string("Hello"));

编译器会计算出一个 std::optional是需要的,并进行转换。但是,这太冗长了。感谢 C++11,我也可以这样做:

func({"Hello"});

虽然这好多了,但仍然不理想。我希望能够像调用任何其他需要 std::string 的函数一样调用此函数. 这可能吗? 让函数采用另一种参数类型是可以的,只要它的行为类似于/可以直接转换为 std::optional。 .谢谢。

最佳答案

C++14 向标准库添加了一堆用户定义的字面量,以减少代码的冗长。它看起来像这样:

using namespace std::string_literals;              // needed
// using namespace std::literals; // also ok, but unnecessary
// using namespace std::literals::string_literals; // also ok, but why??

int main()
{
std::string str = "string"s;
^^^^^^^^
// This is a std::string literal,
// so std::string's copy constructor is called in this case
}

另请查看 thisthis以供引用。

关于c++ - 使用 std::optional 参数调用函数,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/42058986/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com