首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >使用decltype的类型的条件声明

使用decltype的类型的条件声明
EN

Stack Overflow用户
提问于 2018-01-01 11:53:45
回答 1查看 507关注 0票数 1

我认为条件类型可以在模板函数中使用decltype来声明。但事实似乎并非如此。谁能指出我的测试代码出了什么问题?

代码语言:javascript
复制
#include <boost/type_index.hpp>
using boost::typeindex::type_id_with_cvr;

#define print_type(var) do { \
  std::cout << type_id_with_cvr<decltype(var)>().pretty_name() << std::endl; \
} while(0)

template <typename T1, typename T2>
auto max(T1 a, T2 b) -> decltype(a < b ? b : a) {
  decltype(a < b ? b : a) c = a < b ? b : a;
  print_type(c);
  return a < b ? b : a;
}

int main() {
  int i = 10;
  double d = 3.3;

  decltype(i < d? d : i) r = i < d? d : i;
  print_type(r); // -> double
  std::cout << r << std::endl; // 10
}
EN

回答 1

Stack Overflow用户

发布于 2018-01-01 11:59:57

我想你的意图是

代码语言:javascript
复制
decltype( a < b ? a : b )

是在a < b时获取b的类型,否则获取a的类型。

也就是说:我假设您的意图是根据ab的矮小时间值获得一个类型确定的运行时

这在C++中是不可能的,因为变量的类型必须在编译时中决定。

使用该decltype(),您可以获得三元运算符的类型

代码语言:javascript
复制
a < b ? a : b

这并不依赖于ab的值,而仅仅依赖于它们的类型。

所以,在这种情况下

代码语言:javascript
复制
decltype(i < d? d : i)

其中i是一个intd是一个double,您将获得一个double,而id的值是不相关的。

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

https://stackoverflow.com/questions/48047033

复制
相关文章

相似问题

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