我收到了C++的演讲幻灯片,仅提及这些幻灯片而不解释它们的含义以及它们的区别:
int (*arr)[]={...};
int *(arr[])={...};
int (&arr)[]={...};
int &(arr[])={...}; // not allowed?
Run Code Online (Sandbox Code Playgroud)
这些意味着什么?我尝试使用其中一些程序运行程序,但我收到错误,因为我不知道在初始化列表中放入什么.
int (*arr)[] = { ... };
这根本不是一个数组.这是指向未知大小的数组的指针.请注意,这是一个标量类型.它只是一个数据指针,与任何其他数据指针在本质上没有区别.这意味着使用{ ... }初始化程序的唯一方法是在其中指定正确类型的单个值{ ... }.例如
int (*arr)[] = { nullptr };
Run Code Online (Sandbox Code Playgroud)
这是一样的
int (*arr)[] = nullptr;
Run Code Online (Sandbox Code Playgroud)int *(arr[]) = { ... };
这确实是一个阵列.同样的事情可以表达为
int *arr[] = { ... };
Run Code Online (Sandbox Code Playgroud)
这是一个int *指针数组.它的大小取决于提供的初始化程序数{ ... }.例如
int *arr[] = { nullptr, &some_int, &some_other_int };
Run Code Online (Sandbox Code Playgroud)
声明arr为3个类型的指针数组int *.
int (&arr)[] = { ... };
这本身不是数组.这是对未知大小的数组的引用.同样,{ ... }在这种情况下,唯一合法的初始值设定项只是int []内部类型的一个左值{ ... }.如果声明了数组,则const可以int使用此语法将其附加到s 的临时数组,例如
const int (&arr)[] = { 1, 2, 3 };
Run Code Online (Sandbox Code Playgroud)
但没有const它是不可能的.(const尽管如此,我对这种合法性表示怀疑.GCC接受了它.)
int &(arr[]) = { ... };
这是尝试声明一个引用数组.不允许.
| 归档时间: |
|
| 查看次数: |
108 次 |
| 最近记录: |