没有类型别名可以做同样的事情吗?
void f()
{
typedef char Str[16];
int n=256;
Str** p = new Str*[n];
delete[] p;
}
Run Code Online (Sandbox Code Playgroud)
我尝试了以下但没有奏效:
// char(**p)[16] = new char(*[n])[16]; // error
// char(**p)[16] = new (char(*[n])[16]); // error
Run Code Online (Sandbox Code Playgroud)
似乎您想创建一个元素类型为 的动态数组char (*)[16]。不,没有类型别名就无法完成。为了使用动态范围,您需要使用以下形式的new 表达式(C++17 [expr.new]/1):
::(opt)newnew-placement (opt) new-type-id new-initializer (opt)
但是,如果您查看new-type-id、new-declarator和noptr-new-declarator 的定义,您会发现不允许使用括号来改变运算符优先级。因此,我们无法在此上下文中明确写下所需的类型。
最佳解决方案:使用std::vector. 如果您不能这样做(也许您的目标是一些非常有限的独立实现),则使用 typedef。