数组类型的语法是什么?

use*_*352 4 c++ arrays

类型 []吗?例如,我可以吗?

T<int[]>;
Run Code Online (Sandbox Code Playgroud)

对于一些模板T.

Geo*_*che 5

该类型的"类型的数组T"T [dimension],这是你可以通过什么作为模板参数.例如:

someTemplate<int [10]> t; // array type as template parameter
int a[5]; // array of 5 ints named 'a'
Run Code Online (Sandbox Code Playgroud)

数组必须具有必须大于0的维度U u[];.这意味着例如非法.

有些情况可能看似异常,第一个是参数:

void f(T[]);
Run Code Online (Sandbox Code Playgroud)

这是参数的特殊规则,f()实际上等同于以下内容:

void f(T*);
Run Code Online (Sandbox Code Playgroud)

然后是数组的直接inialization:

int a[] = { 1, 2, 3, 4 };
Run Code Online (Sandbox Code Playgroud)

这里,数组大小通过初始化程序中的元素数隐式给出,因此类型为ais int[4].

还有不完整的数组类型没有特定的边界,但是你不能直接创建这些的实例(更多请参阅Johannes的答案):

template<class T> struct X { typedef T type; };
X<int[]>::type a = { 1, 2, 3 };
Run Code Online (Sandbox Code Playgroud)

如果您正在寻找动态数组,请选择标准容器std::vector<T>.

  • 不,它无效. (3认同)
  • 不,它......嘿,我不是自动机;)你不能省略维度,除了上面添加的参数的角落情况,当你想要一个数组实例时,表格是`type name [dimension];` . (3认同)
  • `T <int []>`完全有效. (2认同)
  • 例如,C++ 0x的智能指针使用`unique_ptr <int []> u(new int [N]);`告诉它删除数组删除操作符传递的指针.作为一个更具体的例子,`template <typename T> struct id {typedef T type; }; id <int []> :: type t = {1,2,3};`(这使用`int []`作为声明类型,并通过计算初始化器使其成为`int [3]` (2认同)