Nic*_*las 12
因为optional,在C++ 17中标准化,不允许引用类型.这被设计排除在外.
有两个原因.首先,从结构上讲,a optional<T&>相当于a T*.它们可能有不同的接口,但它们做同样的事情.
第二件事是,标准委员会实际上没有就确切optional<T&>应该如何表现的问题达成共识.
考虑以下:
optional<T&> ot = ...;
T t = ...;
ot = t;
最后一行应该怎么做?它是否正在引用对象ot并对其进行复制分配,这样做*ot == t?或者它应该重新绑定存储的引用本身,这样ot.get() == &t?更糟糕的是,根据在ot任务之前是否参与,它会做出不同的事情吗?
有些人会期望它做一件事,有些人会期望它做另一件事.所以无论你选择哪一方,都会让人感到困惑.
如果你使用了一个T*,那么很明显会发生什么:
T* pt = ...;
T t = ...;
pt = t;   //Compile error. Be more specific.
*pt = t;  //Assign to pointed-to object.
pt = &t;  //Change pointer.
在[可选]中:
需要实例化模板的程序对于引用类型或可能的 cv 限定类型是可选的,
in_place_t或者nullopt_t是格式错误的。
没有std::optional<T&>。现在,您必须使用std::optional<std::reference_wrapper<T>>.
| 归档时间: | 
 | 
| 查看次数: | 1659 次 | 
| 最近记录: |