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

C++未知边界数组引用作为函数调用参数的合法性咨询

解答

示例1可编译的原因

C标准从未禁止将未知边界数组的引用作为函数形参类型,你此前的认知属于常见误解,GCC 10.x以下版本无法编译是编译器的实现缺陷,并非标准不支持。
GCC 10版本正式修复了该问题,允许已知边界的数组实参(如你示例中的int k[3])绑定到int (&)[]类型的形参:已知长度数组类型int[N]是未知长度数组类型int[]的派生类型,该引用绑定符合标准规则,不会触发数组到指针的退化,因此搭配任意C
标准(包括C++11)都可以正常编译。

示例2模板写法的合法性

示例2的写法属于完全合法的C代码,在C11、C17及所有后续C版本中都符合语法要求。
需要注意的是你示例中的模板参数T1没有在函数参数列表中使用,实际调用时需要显式指定T1的类型,否则编译器无法完成模板参数推导。如果你需要利用模板自动推导数组长度,可以采用如下通用写法:

template<typename T, size_t N>
void foo(T (&x0)[N]) {
    // 函数内部可直接使用常量N获取数组长度
}

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.05 15:09:02