gpt4 book ai didi

c++ - 为什么 GCC 拒绝引用 std::optional?

转载 作者:可可西里 更新时间:2023-11-01 18:18:21 31 4
gpt4 key购买 nike

std::optional<int&> xx;只是不针对最新的 gcc-7.0.0 快照进行编译。 C++17标准是否包括std::optional供引用?为什么不呢? (我猜在专用特化中使用指针的实现不会造成任何问题。)

最佳答案

因为 optional ,如 C++17 中的标准化,不允许引用类型。这是设计排除的。

这有两个原因。首先是,从结构上讲,一个 optional<T&>相当于 T* .它们可能有不同的界面,但它们做的事情是一样的。

第二件事是,标准委员会实际上没有就 optional<T&> 究竟如何的问题达成共识。应该行为。

考虑以下几点:

optional<T&> ot = ...;
T t = ...;
ot = t;

最后一行应该做什么?是否采用 ot 引用的对象并复制分配给它,这样 *ot == t ?或者它应该重新绑定(bind)存储的引用本身,这样 ot.get() == &t ?更糟的是,它会do different things based on whether ot was engaged or not在作业之前?

有些人会期望它做一件事,有些人会期望它做另一件事。因此,无论您选择哪一方,都会有人感到困惑。

如果您使用了 T*相反,很清楚会发生什么:

T* pt = ...;
T t = ...;
pt = t; //Compile error. Be more specific.
*pt = t; //Assign to pointed-to object.
pt = &t; //Change pointer.

关于c++ - 为什么 GCC 拒绝引用 std::optional?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/40382838/

31 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com