元组大小的默认构造函数及其转换为std :: size_t

时间:2018-04-22 03:44:35

标签: c++ c++11 c++14

在下面的代码中,我想知道std::tuple_size<T>{}std::tuple_size<T>()如何返回元组的大小。在查看docs使用此调用时,似乎我应该使用() operator或静态::value成员变量来获取元组大小。但是,在运行此代码时,它会编译并生成正确的输出,tuple_size如何从构造函数返回值?

#include <iostream>
#include <tuple>

template <class T>
void test(T)
{
    //std::make_index_sequence<std::tuple_size<T>{}>{} Seen used like this spurned my ?
    std::cout << std::tuple_size<T>{} << '\n';
    std::cout << std::tuple_size<T>() << '\n';
    std::cout << std::tuple_size<T>()() << '\n';
    std::cout << std::tuple_size<T>::value << '\n';
}

int main()
{
    test(std::make_tuple(1, 2, 3.14));
}

1 个答案:

答案 0 :(得分:1)

http://en.cppreference.com/w/cpp/utility/tuple/tuple_size

表示:

  

成员常量

     

     

[静态]

     

sizeof ...(类型)(公共静态成员常量)

     

会员职能

     

operator std :: size_t

     

将对象转换为std :: size_t,返回值(公共成员   功能)

     

运算符()

     

(C ++ 14)

     

返回值(公共成员函数)

所以难怪。 第1&amp;第二种形式使用转换运算符 第三种形式显式调用函数调用运算符 第四种形式使用静态成员。 这是一个非常方便的标准实用程序。没有其他标准工具具有尽可能多的便利功能。