【发布时间】:2011-08-27 09:34:15
【问题描述】:
我很难理解数组的 typedef 模式。
typedef char Char10[10];
void fun (Char10 a) // not passing reference (interested in pass by value)
{
if(typeid(Char10) == typeid(char*))
throw 0; // <--- never happens
}
int main ()
{
char a[10]; fun(a); // ok
char b[11]; fun(b); // why works ?
}
为什么fun() 接受不同大小的数组? char[10] 和 char[11] 不是不同的类型吗?
编辑:对于那些说它衰减为指针的人,请参阅我编辑的代码。 char[10] 和 char* 似乎不匹配。
【问题讨论】:
-
当人们说“数组衰减到指针”时,他们特别指的是参数
a。因此,在您的if函数内部,您应该比较typeid(a) == typeid(char*)。这将显示类型 match。比较typeid(Char10) == typeid(char*)没有显示任何内容。这些确实是不同的类型。