没有类型别名是否可以做同样的事情?
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]
。不,没有类型别名就无法完成。为了使用动态范围,您需要使用以下形式的new-expression(C ++ 17 [expr.new] / 1):
::
(opt)new
new-placement(opt)new-type-id new-initializer(opt)
但是如果您查看new-type-id,new-declarator和noptr-new-declarator的定义,则会看到不允许使用括号来更改运算符优先级。因此,在这种情况下,我们无法明确写下所需的类型。
最佳解决方案:使用std::vector
。如果您不能这样做(也许您的目标是一些非常有限的独立实现),请使用typedef。
您能否提供更多信息?无法真正理解您想做什么。您要使用char指针创建二维数组吗?