在C ++中,将数组传递给函数的唯一方法是使用指针,考虑如下 功能:
void someFunc(sample input[7]){
//whatever
}
void someFunc(sample input[]){
//whatever
}
void someFunc(sample (& input)[7]){
//whatever
}
当函数未内联时,以上所有函数参数与以下函数参数相同:
void someFunc(sample * input){
//whatever
}
现在要传递带有值的数组,我们必须将它放在如下结构中:
struct SampleArray{
public:
sample sampleArray[7];
};
现在我想知道是否有人知道C ++标准中这种设计背后的原因,它使得通过任何语法和强制使用结构都无法通过值传递纯数组。
答案 0 :(得分:2)
向后兼容性原因。 C ++别无选择,只能从C继承此行为。
答案 1 :(得分:1)
This answer之前的类似问题解决了为什么在C中引入这种行为的原因(或者更具体地说,为什么结构中的数组和数组被语言处理的原因不同)。
C ++采用了C的那一部分,但增加了通过引用传递数组的能力(注意你的第三个版本someFunc
通过引用传递数组,并不等同于使用指向其第一个元素的指针) 。此外,C ++包括可以按值传递的各种容器类型(最近包括std::array
)
答案 2 :(得分:0)
可能是其C系列的功能。数组只是指向内存的指针,在没有编译器生成额外代码的情况下透明地完成它是很困难的。另外,实现一个在写入时执行惰性复制的容器类也是微不足道的,这将会表现得更好。