首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >对std::ignore的要求

对std::ignore的要求
EN

Stack Overflow用户
提问于 2013-05-24 03:01:52
回答 2查看 704关注 0票数 15

C++11引入了一个名为std::ignore的对象

代码语言:javascript
复制
const /* unspecified */ ignore;

为了简洁起见,让我们

代码语言:javascript
复制
typedef decltype(std::ignore) T; 

据我所知,根据std::tie C++11,20.4.2.4:7的规范,对T的唯一要求是它必须是CopyAssignable

在g++-4.8中,我发现T是额外的DefaultConstructible (例如,T x;编译)。这是实现定义的行为吗?

(如果我遗漏了对T的其他要求,请详细说明。)

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2013-05-24 03:11:48

该标准对ignore的类型没有要求,除了它是一种与所有其他类型不同的类型之外。

当与tie一起使用时,标准库容器为允许ignore获得所需行为所做的任何工作都符合该标准库实现的要求。库可能会给它一个template<T&> operator=(const T&)重载,或者它可能会使用一些其他的机制来使它工作。标准上没说。所以它甚至不需要是CopyAssignable

请注意,只有当您专门使用ignore时,tie才有特殊的行为。如果您使用自己创建的其他值(由于类型没有要求,因此不能保证您能够这样做),您将得到未定义的行为。

票数 15
EN

Stack Overflow用户

发布于 2013-05-24 03:12:00

据我所知,根据std::tie C++11,20.4.2.4:7的规范,对T的唯一要求是它必须是CopyAssignable

从形式上讲,我认为根本没有任何要求。tie()可以接受ignore作为参数这一事实并不意味着它必须在元组中存储该类型的值:尽管在实践中很可能会发生这种情况,但我并不认为正式规范一定会暗示这一点。

这是实现定义的行为吗?

不,行为是未指定的,因为实现不需要记录它(感谢Pete Becker澄清了这一点)。

票数 8
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/16721884

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档