c – 为什么GCC拒绝参考的std :: optional?

的std ::可选< INT&安培;> XX;只是不编译最新的 gcc-7.0.0快照. C 17标准是否包含参考的std :: optional?为什么不呢? (在专门的专业化中使用指针的实现不会引起任何问题.)

解决方法

因为C 17中标准化的可选项不允许引用类型.这被设计排除在外.

有两个原因.首先,从结构上讲,可选的< T&>相当于一个T *.它们可能有不同的接口,但它们做同样的事情.

第二点是,标准委员会实际上没有就确切如何选择< T&>的问题达成共识.应该表现.

考虑以下:

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

最后一行应该怎么做?它是通过ot和copy-assign引用对象,这样* ot == t?或者它应该重新绑定存储的引用本身,例如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&...
思路如标题所说采用模N取余法,难点是这个除法过程如何实现。...
本篇博客有更新!!!更新后效果图如下: 文章末尾的完整代码...
刚开始学习模块化程序设计时,估计大家都被形参和实参搞迷糊...