gpt4 book ai didi

c++ - 为什么我们需要 std::nullopt

转载 作者:行者123 更新时间:2023-12-01 14:12:47 30 4
gpt4 key购买 nike

这个问题在这里已经有了答案:





Why is std::nullopt_t part of the C++ standard?

(3 个回答)


去年关闭。




当我们可以使用统一初始化轻松地默认构造一个 std::optional<T> ?

std::optional<T> foo() {
if (on_error)
return {};

// ...
}
以上 std::nullopt有什么缺点吗?解决?

最佳答案


这是默认构造 optional 的一种完全有效的方法。 .
即使是赋值,你也可以复制赋值一个默认构造的 optional= {}而不是使用 std::nullopt :
cppreference实际上says as much :

The constraints on nullopt_t's constructors exist to support both op = {}; and op = nullopt; as the syntax for disengaging an optional object.


... 和原来的一样 proposal for the feature :

Note that it is not the only way to disengage an optional object. You can also use:

op = std::nullopt;

你可能会问自己为什么,然后, std::nullopt根本存在。提案 addresses this, too :

it introduces redundancy into the interface

[similar example]

On the other hand, there are usages where the usage of nullopt cannot be replaced with any other convenient notation:

void run(complex<double> v);
void run(optional<string> v);

run(nullopt); // pick the second overload
run({}); // ambiguous

if (opt1 == nullopt) ... // fine
if (opt2 == {}) ... // illegal

bool is_engaged( optional<int> o)
{
return bool(o); // ok, but unclear
return o != nullopt; // familiar
}

While some situations would work with {} syntax, using nullopt makes the programmer's intention more clear. Compare these:

optional<vector<int>> get1() {
return {};
}

optional<vector<int>> get2() {
return nullopt;
}

optional<vector<int>> get3() {
return optional<vector<int>>{};
}

总之, std::nullopt可能很有用,但在您的情况下,它只是归结为风格。

关于c++ - 为什么我们需要 std::nullopt,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/62933403/

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