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个元素怎么办?