首页 > 解决方案 > 模板中std::array的大小是如何计算的

问题描述

#include <array>
#include <cstdef>
#include <iostream>
 
// printArray is a template function
template <class T, std::size_t size> // parameterize the element type and size
void printArray(const std::array<T, size>& myArray)
{
    for (auto element : myArray)
        std::cout << element << ' ';
    std::cout << '\n';
}
 
int main()
{
    std::array myArray5{ 9.0, 7.2, 5.4, 3.6, 1.8 };
    printArray(myArray5);
 
    std::array myArray7{ 9.0, 7.2, 5.4, 3.6, 1.8, 1.2, 0.7 };
    printArray(myArray7);
 
    return 0;
}

有人可以帮助了解函数模板如何计算数组的大小。

标签: c++templates

解决方案


首先,std::array是一个模板。当你写

std::array myArray5{ 9.0, 7.2, 5.4, 3.6, 1.8 };

然后应用类模板参数推导(CTAD,推导指南std::array可在此处找到)来推断myArray5类型std::array<double,5>。那就是“计算”大小的地方。

然后当你调用函数模板时:

printArray(myArray5);

模板参数是从函数参数推导出来的(参见此处)。myArray5std::array<double,5>,因此T == doublesize == 5


推荐阅读