gpt4 book ai didi

c++ - 为什么模板函数接收带有一维引用的二维数组,而普通函数不接收

转载 作者:塔克拉玛干 更新时间:2023-11-03 00:02:50 25 4
gpt4 key购买 nike

void fun (char (&a)[2])  // 1D reference
{}

template<typename T, int SIZE>
void funT (T (&a)[SIZE]) // 1D reference
{}

int main ()
{
char c[2][2]; // 2D array
fun(c); // error
funT(c); // ok !!!??
}

我预计 fun() 会出错,但为什么 funT() 可以正常工作!标准中是否有针对此类行为的任何引用,或者 Is it a bug in C++ language?

最佳答案

因为 c 的类型不是 char [2],所以它与第一个不匹配功能。在模板情况下,T 解析为 char [2],这意味着最后的参数类型是 char (&a)[2][2]。 (你可以这样想因为 T 成为 typedefchar[2] 的等价物,并且在此基础上扩展参数类型。)

关于c++ - 为什么模板函数接收带有一维引用的二维数组,而普通函数不接收,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/6123906/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com