将函数声明为合法吗
void f (T arr[10]); // T is built-in type or class
为了向用户表明它需要一个大小为 10 的数组?还是风格不好?
我知道传递数组总是通过指针处理,但最好让函数的用户知道 - 仅通过查看声明 - 传递的数组必须具有指定的大小而不是用户必须阅读该功能的整个文档。
会是
void f (T arr[10] = 0)
{
if (!arr)
// do stuff without array
else
// do stuff with array
}
还可以吗? f()
也可以在不传递数组的情况下使用(默认参数 0
)。
最佳答案
如果您真的只需要 10 个元素的 C 样式数组,
void f( int (&array)[10] );
将强制执行;任何尝试传递除 int [10]
之外的任何内容
将无法编译。
问题是:
如果调用者自己接收到数组作为参数, 而且他没有遵守这个惯例,他不能给你打电话。你 不能用指针调用这个函数。
如果调用者有一个更大的数组,并且只想让你访问 一个10元子阵,他叫不上你。
根据上下文,这些可能是也可能不是真正的问题。
关于你的第二个不相关的问题:
void f( int arr[10] );
完全一样:
void f( int* arr );
并且可以为其提供相同的默认参数。
关于c++ - 函数采用预期大小的数组,向用户发出信号,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/21736226/