严格规则通过指针将指针传递给C ++标准中的函数的原因

时间:2010-11-18 18:46:19

标签: c++ arrays pointers standards parameter-passing

在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 ++标准中这种设计背后的原因,它使得通过任何语法和强制使用结构都无法通过值传递纯数组。

3 个答案:

答案 0 :(得分:2)

向后兼容性原因。 C ++别无选择,只能从C继承此行为。

答案 1 :(得分:1)

This answer之前的类似问题解决了为什么在C中引入这种行为的原因(或者更具体地说,为什么结构中的数组和数组被语言处理的原因不同)。

C ++采用了C的那一部分,但增加了通过引用传递数组的能力(注意你的第三个版本someFunc通过引用传递数组,并不等同于使用指向其第一个元素的指针) 。此外,C ++包括可以按值传递的各种容器类型(最近包括std::array

答案 2 :(得分:0)

可能是其C系列的功能。数组只是指向内存的指针,在没有编译器生成额外代码的情况下透明地完成它是很困难的。另外,实现一个在写入时执行惰性复制的容器类也是微不足道的,这将会表现得更好。