c++ - 元组大小默认构造函数及其到 std::size_t 的转换

标签 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));
}

最佳答案

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

说:

Member constants

value

[static]

sizeof...(Types)  (public static member constant)

Member functions

operator std::size_t

converts the object to std::size_t, returns value  (public member function)

operator()

(C++14)

returns value  (public member function)

难怪。 第一和第二形式使用转换运算符。 第三种形式显式调用函数调用运算符。 第四种形式使用静态成员。 这是一个非常方便的 std 实用程序。没有任何其他标准工具具有如此多的便捷功能。

关于c++ - 元组大小默认构造函数及其到 std::size_t 的转换,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/49962289/

相关文章:

c++ - 用C++读取二进制文件并翻译其中的一些内容

c++ - 自定义迭代器中 distance_type 的目的 - std::distance(first, last) 将返回错误结果,如果 first 和 last 距离太远

reference_wrapper 容器的 c++ 模板特化

c++ - 没有大于 k 的质因数的正数

c# - 在 C# 中使用 C++ dll 对象

c++ - 如何从文件写入字符串

c++ - 如何从 boost::posix_time::ptime 获取自纪元时间以来的毫秒数

c++ - find_if 中具有多个参数的 Lambda

c++ - C++ lambda 中的静态变量

c++ - 如果我将它绑定(bind)到 "this", std::bind 是否保留对象的引用/拷贝?