复合类型的动态数组

Las*_*sie 1 c++ new-operator

没有类型别名可以做同样的事情吗?

    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)

Bri*_*ian 6

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

::(opt) new new-placement (opt) new-type-id new-initializer (opt)

但是,如果您查看new-type-idnew-declaratornoptr-new-declarator 的定义,您会发现不允许使用括号来改变运算符优先级。因此,我们无法在此上下文中明确写下所需的类型。

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