You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

C++中如何用sizeof()获取数组引用大小?无大小参数为何报错?

为什么未指定大小的数组引用无法使用sizeof()?

要搞清楚这个问题,得从C++里数组类型的完整性和sizeof的要求说起:

核心原因:不完整类型无法使用sizeof

  • 你在main里声明的arr,编译器通过初始化列表能推导出它的类型是double[6]——这是一个完整类型,编译器明确知道它的大小(6个double的总字节数),所以sizeof(arr)能直接计算出结果。
  • 而函数参数里的double (&list)[],是对**未知大小的数组(不完整类型)**的引用。sizeof操作符要求操作数必须是完整类型,因为它需要明确知道类型的内存占用细节才能计算大小。对于不完整的数组类型,编译器没有足够的信息,自然会报错。

为什么指定大小后就能正常工作?

当你把参数改成double (&list)[6]时,这个引用的类型变成了对**完整数组类型double[6]**的引用。此时编译器明确知道数组的大小,sizeof(list)就能正常计算出整个数组的总字节数,和main里sizeof(arr)的结果一致。

适配任意大小数组的解决方案

如果想让函数既能接收任意大小的数组,又能通过引用获取数组大小,可以用模板让编译器自动推导数组的大小:

#include <iostream>

template <size_t N>
double sum(double (&list)[N]){
    double total{};
    std::cout << "the size is : " << sizeof(list) << std::endl;
    for(size_t i{} ; i < N ; i++){
        total += list[i];
    }
    return total;
}

int main(){
    double arr[]{34.5, 67.8, 92.345, 8.1234, 12.314, 3.4};
    double result{};

    std::cout << "size of the array : " << sizeof(arr) << std::endl;
    result = sum(arr); // 无需手动传size,编译器自动推导N=6
    std::cout << "the total is " << result << std::endl;
    
    return 0;
}

内容的提问来源于stack exchange,提问作者semicolon_missing

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.13 09:05:28