c++ - 函数采用预期大小的数组,向用户发出信号

标签 c++ arrays parameter-passing

将函数声明为合法吗

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/

相关文章:

C++ 将字符从 int append 到 std::string

c++ - 在不调用默认构造函数的情况下声明对象

python 3D numpy 数组时间索引

c - 从函数返回到 main 的指针数组为 NULL

r - R中的参数检查

c++ - 为 C++ 程序创建一个健壮的 Makefile

c++ - 使用模板获取数组的大小和结束地址

c# - c到c#中的字符数组

java - 将类的自实例传递给另一个类,从那个类,java

java - 方法声明中参数声明之前的 final 关键字