iam*_*ind 5 c++ arrays templates pass-by-reference
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 !!!??
}
Run Code Online (Sandbox Code Playgroud)
我可以期待这fun()会给出错误,但是如何才能funT()正常工作!这种行为的标准中是否有任何参考,或者它是 C++语言中的错误?
Jam*_*nze 11
因为类型c不是char [2],它与第一个函数不匹配.在模板的情况下,T解析为char [2],这意味着最终的参数类型是char (&a)[2][2].(您可以将其视为T等同于typedefto char[2],并基于此扩展参数类型.)