首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >decltype的行为

decltype的行为
EN

Stack Overflow用户
提问于 2011-05-24 03:08:31
回答 2查看 2.8K关注 0票数 11

假设我有一个stl容器类obj的对象。我可以这样定义相同类型的其他对象:

代码语言:javascript
复制
decltype(obj) obj2;

但我不能以这种方式为容器声明迭代器:

代码语言:javascript
复制
decltype(obj)::iterator it = obj.begin();

为什么?我做错了什么吗?

EN

回答 2

Stack Overflow用户

发布于 2011-05-24 03:15:55

这是因为语言被解析的方式。

代码语言:javascript
复制
decltype(obj)::iterator it = obj.begin();

你想让它变成

代码语言:javascript
复制
(decltype(obj)::iterator) it;

但实际上,它变成了

代码语言:javascript
复制
decltype(obj) (::iterator) it;

我不得不承认,我也很惊讶地看到情况是这样的,因为我确定我以前做过这样的事情。但是,在这种情况下,您可以只使用auto,甚至可以使用decltype(obj.begin()),但除此之外,您还可以

代码语言:javascript
复制
typedef decltype(obj) objtype;
objtype::iterator it;
票数 9
EN

Stack Overflow用户

发布于 2011-05-24 09:47:16

在VC++的解析器被修复以反映FDIS之前,另一个解决方法是使用std::identity<>元函数:

代码语言:javascript
复制
std::identity<decltype(obj)>::type::iterator it = obj.begin();
票数 2
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/6101728

复制
相关文章

相似问题

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