更新
typedef uint16_t UnicodeChar;
更新2:
在这种情况下,似乎禁止强制转换,因为数组的大小不一致。那么为什么它不起作用呢,例如,我传递的是大小为10的u_array
(不是之前的20)。
1。我有这样的功能
void func(uint16_t (&pin_code)[10])
{
// do stuff
}
一个数组(这里UnicodeChar显然是16位):
Unicode::UnicodeChar u_array[20];
如何将此数组转换为能够将其传递给func()
?
顺便说一句,这编译没有任何错误:
func((uint16_t (&)[10])u_array);
但这不是:
func(static_cast<uint16_t (&)[10]>(u_array));
2。为什么?
3。(Generic one)如何编写该数组的类型?例如int (*)[10]
是一个指向10个整数数组的指针,int (&)[10]
是对10个整数数组的引用,但数组本身是_____? int [10]
?
4。当我尝试将array
类型对象转换为reference
时,我的数字 2 是否正确类型?
答案 0 :(得分:2)
见4
这是一个reinterpret_cast
,因为&#34;数组是20个UnicodeChar&#34;正在被别名为&#34;数组为10 uint16_t&#34;。所以static_cast
不起作用。如果源和目标类型没有定义reinterpret_cast
,则C样式转换将解析为static_cast
。
int[10]
是10个整数的数组类型。
C ++标准尚不清楚是否允许别名&#34;切片&#34;像这样的数组。但我希望它会起作用。但是,您可以重新设计功能以不需要此操作。