Warning: file_get_contents(/data/phpspider/zhask/data//catemap/6/google-chrome/4.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C++ 按引用传递数组-较大数组的子集_C++ - Fatal编程技术网

C++ 按引用传递数组-较大数组的子集

C++ 按引用传递数组-较大数组的子集,c++,C++,我知道还有其他方法可以实现这一点或使用容器。这只是为了满足我的好奇心。假设我有以下代码: void byref(int (&a)[5]); int main() { int a[5]; byref(a); } 通过引用传递C样式数组的一个优点是,sizeof将对其起作用,就像std::end一样。但是现在只可能传递一个正好如此大小的数组 是否可以通过引用将较大数组的子集传递给此函数?例如,我想做: int main() { int a[10]; byr

我知道还有其他方法可以实现这一点或使用容器。这只是为了满足我的好奇心。假设我有以下代码:

void byref(int (&a)[5]);

int main()
{
    int a[5];
    byref(a);
}
通过引用传递C样式数组的一个优点是,
sizeof
将对其起作用,就像
std::end
一样。但是现在只可能传递一个正好如此大小的数组

是否可以通过引用将较大数组的子集传递给此函数?例如,我想做:

int main()
{
    int a[10];
    byref(a + 1);
}
有什么办法可以让这一切顺利进行吗

我让它构建并运行,在VS2015中给出了预期的值,但代码看起来很不可靠:

byref(reinterpret_cast<int(&)[5]>(*(a + 1)));
byref(重新解释演员表(*(a+1));

我只想到将外观不好的强制转换包装到函数中:

#包括
#包括
void byref(int&a)[5])
{

std::cout有了这个原型,我看不到除铸造之外的其他方法

通常,我也会看到这个:
byref((int(&)[5])*(b+5));
,当然它和你的一样,也不太安全


所以,我看不到任何清晰、漂亮的方法(除了宏)。但是,我将对您的问题进行投票,以查看您是否遗漏了某些内容!

使用
数组视图
@KarolyHorvath,OP知道有其他实现方法或使用容器。在С++中,您可以使用模板:
模板void byref(int(&a)[N]);
@Constructor如果函数只想处理5个元素怎么办?