将数组传递给函数的大小控制
Size control on passing array to function
在C++中,数组应该通过引用传递给函数。因此,在下文中,函数foo
应通过引用隐式使用数组inp
。
void foo(double inp[10]) {}
void foo1(double (&inp)[10]) {}
我的问题是,既然这两个函数应该对输入变量有相同的解释,为什么我们可以在下面的内容中调用foo
,但我们不能调用foo1
?
int main()
{
double ary[20];
foo(ary); // compiles without any problem.
foo1(ary); // compiler error: invalid initialization of reference of type ‘double (&)[10]’ from expression of type ‘double [20]’
return 0;
}
因为两个函数应该对输入变量具有相同的解释
但他们没有。类型为 double inp[10]
的函数参数会自动调整为指针double*
。这 10 在此处不提供类型信息。由于所有数组都衰减为指针,这将允许您传递任何大小的数组。
但是,不会调整对数组的引用。类型信息仍然存在,并且它必须是对正好包含十个双精度的数组的引用。将引用传递给任何大小的数组的唯一方法是为其创建一个单独的函数,您可以编写一个函数模板来完成
template<std::size_t N>
void foo2(double (&inp)[N]) {}
相关文章:
- 控制到达非空函数clang(-Wreturn-type)的末尾
- 我在 C++ 代码中遇到错误警告:控制到达非空函数 [-Wreturn 类型] 的末尾
- 是否可以使用三元切换/控制/谓词成员函数调用?
- 如何使用 qt 中的信号槽控制函数的返回
- 控制使用 while 循环到达非空函数 (c++) 的末尾
- 控制通过类中的成员函数更改成员变量的能力C++
- 错误:控制到达非空函数的末尾 [-Werror=返回类型] } ^
- 访问控制对于已删除的构造函数是否重要?
- HPX 是否提供具有粒度控制的基于任务的并行化迭代函数?
- Windows SDK 控制可用的函数
- 控制可能达到C 中非空隙函数误差的末端
- 如何根据模板参数包是否匹配函数参数来控制模板函数定义?
- 不受控制的循环和函数 C++跳过
- 当我尝试对数组的内容使用函数时,控制台中没有显示任何内容
- 为什么具有私有构造函数的类不阻止从此类继承?如何控制哪些类可以从某个基继承?
- 将数组传递给函数的大小控制
- 仅在我退出应用程序后,使用Cout.write()函数在控制台上打印字符串
- 编译错误:(警告:控制到达非空函数 [-wreturn 类型] 的末尾)
- 该C 警告是什么 - 控制达到非空隙函数的末端
- 如何在C++中使用错误控制函数