c++ - nullptr、{} 和 nullopt 之间的区别

标签 c++ pointers c++17 stdoptional

为什么我不能使用 nullptr 而不是 nullopt?为什么 {} 翻译成 nullopt

最佳答案

Why can't i use nullptr instead of nullopt?

因为它们是不同的东西。它们意味着不同的东西,并且它们用于不同的东西。

必须有一个独特的 nullopt 值才能与 std::optional 一起使用,因为 nullptr 已经做了一些事情:

std::optional<int*> o;
o = nullptr;
assert( o.has_value() );
o = std::nullopt;
assert( !o.has_value() );

And why {} translates like nullopt?

(请注意,这仅适用于 std:optional,而不适用于将 {} 与其他类型一起使用时。)

它这样做是因为能够说 o = {} 并让它做正确的事情™ 很方便,所以 std::optional 的规范是编写使其工作。

关于c++ - nullptr、{} 和 nullopt 之间的区别,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/47791737/

相关文章:

c - 关于 *argv[] 的指针

c++ - 具有自动和结构化绑定(bind)的 Ranges V3 zip

c++ - libPd 和 c++ 包装器实现

c++ - 如何将 UDF 添加到 MySQL?

c++ - 如何 boost 我的项目?

c - 为什么在创建结构时需要地址运算符(&)?

c - 在 C 中调整动态矩阵的大小

c++ - 处理 gcc 的 noexcept 类型警告

c++ - 单线捷径,用于将列表重新分配给阵列

c++ - 为什么在没有返回变量的情况下调用 MessageBox[etc]() 会导致程序崩溃?