Bob*_*bby 16 c++ pointers reference optional c++-standard-library
在我看来,在C++中可以使用该类型std::optional<std::reference_wrapper<T>>.这种类型的对象本质上是对类型对象T或空值的引用,即几乎是一个指针.我的问题:
有没有之间的任何概念上的差异std::optional<std::reference_wrapper<T>>和T*?
有什么实际区别吗?是否有可能选择std::optional<std::reference_wrapper<T>>结束的情况T*?
Tim*_*imK 14
std::optional<std::reference_wrapper<T>>和之间的主要区别T*在于,T*您必须考虑谁拥有所指向的内存。
如果函数返回,T*您必须知道是您负责释放内存还是其他人负责。当它是参考时,这不是你必须关心的事情。
有没有之间的任何概念上的差异
std::optional<std::reference_wrapper<T>>和T*?
std::optional<>顾名思义,它是指当我们可以有一个值或根本没有任何值时使用。
相当于不具有值用于一个T*对象将被分配nullptr给它,即:该指针将指向无处,而不是某个地方(或甚至任意位置的,即:未初始化)。可以说将for指针std::optional<>的概念导出nullptr到任意类型。因此,我想说它们在概念上非常相似,是std::option<>一种概括的方法。
有实际区别吗?是否存在建议选择的
std::optional<std::reference_wrapper<T>>情况T*?
我能想到的大小。std::optional<>包含一个内部标志,用于指示值的存在/不存在,而对于,T*则将nullptr其直接编码为指针可以存储的值之一。因此,std::optional<std::reference_wrapper<T>>对象将大于T*。
在安全性方面,与不同T*,std::optional<>提供了成员函数value(),如果没有值,该成员函数将引发异常(它提供的安全性与不安全性operator*()一样T*)。
同样,例如,使用std::optional<std::reference_wrapper<T>>代替代替T*作为函数的返回值可能以更明确的方式表明可能根本没有值。
| 归档时间: |
|
| 查看次数: |
1382 次 |
| 最近记录: |