通过强制转换创建子数组引用?

时间:2014-03-01 20:00:46

标签: c++ language-lawyer

我想调用一个签名如下的函数:

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标准的章节和句子,我更有可能接受你的回答。

0 个答案:

没有答案