c – 为什么GCC拒绝参考的std :: optional?
发布时间:2020-12-16 03:45:03 所属栏目:百科 来源:网络整理
导读:的std ::可选 INT安培; XX;只是不编译最新的 gcc-7.0.0快照. C 17标准是否包含参考的std :: optional?为什么不呢? (在专门的专业化中使用指针的实现不会引起任何问题.) 解决方法 因为C 17中标准化的可选项不允许引用类型.这被设计排除在外. 有两个原因.首
的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 有些人会期望它做一件事,有些人会期望它做另一件事.所以无论你选择哪一方,都会让人感到困惑. 如果您使用了T *,那么很明显会发生以下情况: T* pt = ...; T t = ...; pt = t; //Compile error. Be more specific. *pt = t; //Assign to pointed-to object. pt = &t; //Change pointer. (编辑:李大同) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |