【问题标题】:std::index_sequence return size always 1std::index_sequence 返回大小始终为 1
【发布时间】:2016-11-15 14:38:25
【问题描述】:

我是 C++14 std::index_sequence 的新手。结构的size 成员是什么意思?无论我创建多少元素,它总是返回一个。

std::integer_sequence<int, 1, 2, 3>::size  => 1
std::index_sequence<8, 7, 1, 5>::size => 1 

虽然返回值应该是 3 和 4(该序列的元素数)。

【问题讨论】:

标签: c++ metaprogramming c++14


【解决方案1】:

std::integer_sequence::size是一个函数,所以你需要调用它:

std::integer_sequence<int, 1, 2, 3>::size() => 3

您可能会看到1,因为如果您编写类似的代码

std::cout << std::integer_sequence<int, 1, 2, 3>::size;

然后函数将隐式转换为函数指针,然后转换为bool,由于指针不为空,值将为true

【讨论】:

  • 我只是好奇。 cout中的函数指针为什么会转成bool?
  • 编译器应该警告它。
  • @MayurK 因为std::ostreambool 有一个operator&lt;&lt; 重载,但对于函数指针却没有,而且函数指针可以隐式转换为bool
  • @MayurK:因为这是允许代码编译的合法转换。这就是隐式转换的工作原理;它会搜索可用的转换,直到找到使代码工作的转换。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2017-08-10
  • 1970-01-01
  • 2012-12-03
  • 2011-09-25
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多