首页 > 解决方案 > 为什么 c++ 函数可以正确返回数组的大小?

问题描述

我正在学习关于 constexpr 的 c++11。所以我去了网站并学习了如何编码。当我学习如何编码时。我提出了一个关于返回数组的大小函数的问题。我认为它是功能性的,但我不知道如何写成这样。这是我的代码:

#include <iostream>

constexpr auto newline = "\n";

template < typename Type , uint32_t SZ>
constexpr uint32_t len(const Type (&array)[SZ])
{
    return SZ;
}

int main()
{
    int* ptr = new int (9);
    int array[] = {1,2,3,4,5,*ptr};
    std::cout << len(array) << newline;
}
/*
Output:
6

*/

我想知道为什么 len 函数正确返回数组的大小。

标签: c++functionargumentsconstexpr

解决方案


  • 数组有类型int[6](我知道你在声明中省略了[6],但这仍然是真的)
    • 请注意,大小是类型的一部分
  • 通过引用传递数组可防止衰减到指针
    • 参考类型是int (&)[6](你已经添加了一个const很好的措施)
  • 该函数实际上是一个模板,取const T (&)[N]其中两个TN都是参数
    • 像这样的模板调用可以推导出模板参数,所以N会被自动检测到!
    • 你也可以打电话给len<int, 6>(array),但这更没有意义……
  • N然后从函数返回的值作为一个简单的数字。

N但是,应该是 a std::size_t,而不是 a std::uint32_t


推荐阅读