通过引用传递时键入强制转换

时间:2016-11-29 12:13:05

标签: c++ arrays reference pass-by-reference

更新

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 是否正确类型?

1 个答案:

答案 0 :(得分:2)

  1. 见4

  2. 这是一个reinterpret_cast,因为&#34;数组是20个UnicodeChar&#34;正在被别名为&#34;数组为10 uint16_t&#34;。所以static_cast不起作用。如果源和目标类型没有定义reinterpret_cast,则C样式转换将解析为static_cast

  3. int[10]是10个整数的数组类型。

  4. C ++标准尚不清楚是否允许别名&#34;切片&#34;像这样的数组。但我希望它会起作用。但是,您可以重新设计功能以不需要此操作。