我想调用一个签名如下的函数:
void foo(int (&ra)[2]);
也就是说,它的参数是对两个元素数组的引用。让我们假设该函数的作者(谁将保持无名)不倾向于改变界面。
我想在现有数组的子数组上调用该函数。像这样:
void bar()
{
int vals[] = { 1, 2, 3, 4, 5 };
foo(reinterpret_cast<int (&)[2]>(vals[1]));
}
GCC接受此代码并将其编译为我想要的内容,但我完全不确定这是否由语言保证。
此代码实现的行为是定义的(或未定义的)?如果是这样,有没有办法重写bar()
以明确定义的方式做同样的事情?
如果你引用C ++ 03或C ++ 11标准的章节和句子,我更有可能接受你的回答。