【发布时间】:2018-07-21 03:18:24
【问题描述】:
我突然想到在 C++ 中可以使用 std::optional<std::reference_wrapper<T>> 类型。这种类型的对象本质上是对T 类型对象或空值的引用,即几乎是一个指针。我的问题:
std::optional<std::reference_wrapper<T>>和T*之间在概念上有什么区别吗?有什么实际区别吗?在某些情况下,建议选择
std::optional<std::reference_wrapper<T>>而不是T*?
【问题讨论】:
-
是的,这是有道理的。没有
optional<T&>,所以optional< reference_wrapper<T> >是我们拥有的最接近的。这传达了非所有权,没有未初始化的值,没有来自nullptr的意外构造,没有意外算术,没有*、->和 co 的丑陋。 (尽管由于在循环时必须避开auto导致一些 other 丑陋,但如果上下文不提供所需的转换等,请使用.get())。这些都是对语义和安全性的具体好处。只是optional<T&>会更简洁,但是我们会想知道为什么我们可以将它放在容器中而不是T&....
标签: c++ pointers reference optional c++-standard-library