复合类型的动态数组

Dynamic array of compound type

本文关键字:数组 动态 类型 复合      更新时间:2023-10-16

是否可以在没有类型别名的情况下制作相同的东西?

void f()
{
typedef char Str[16];
int n=256;
Str** p = new Str*[n];
delete[] p;
}

我尝试了以下方法,但没有奏效:

// char(**p)[16] = new char(*[n])[16]; // error
// char(**p)[16] = new (char(*[n])[16]); // error

似乎您想创建一个动态数组,其中元素类型为char (*)[16].不,没有类型别名就无法完成。要使用动态范围,您需要使用以下形式的新表达式(C++17 [expr.new]/1(:

::(可选(new放置位置(可选( 新类型 ID 新初始值设定项(可选(

但是,如果您查看new-type-id、new-declarator 和noptr-new-declarator的定义,您会发现不允许使用括号来更改运算符优先级。因此,我们不能在此上下文中显式写下所需的类型。

最佳解决方案:使用std::vector.如果你不能做到这一点(也许你的目标是一些非常有限的独立实现(,那么使用 typedef。