从远古时代开始,当向函数传递指针或从函数传递指针时,我们倾向于对空指针进行特殊处理:
p = get_pointer_to_the_foo(args);
if (p == nullptr) { /* foo is inaccessible, do one thing */ }
else { /* we can access foo, do something else */ }
这是从 C 继承的。现在,我们偶尔会对其他类型做同样的事情,例如使用有符号类型来表示有效的非负值(例如 -1)或指示错误。
随着 的开始,后一种模式现在将最终被弃用。std::optional
: std::optional<unsigned>
或者是nullopt
或非负值。但是 - 指针呢?毕竟,nullptr
只是无数无效指针值之一。因此,当编写新代码时(当所有代码都是 C++17 时)——我们是否应该基本上忘记它,并传递其中之一std::optional<foo_t*>
's 或假定非空foo_t *
's?
指针已经嵌入了可选语义。所以std::optional<T*>
至少可以说这是多余的,并且该功能的引入不会对原始指针产生太大影响。
这也适用于std::unique_ptr
, std::shared_ptr
and std::weak_ptr
所有这些也可以nullptr
.
就像任何新功能一样,我们必须思考什么是实用的,什么是我们本能的在任何可行的地方使用它的冲动。
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)