复合类型的动态数组

Dynamic array of compound type

是否可以在没有类型别名的情况下做同样的事情?

    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-idnew-declaratornoptr 的定义-new-declarator,你会看到括号不允许改变运算符的优先级。因此,我们无法在此上下文中显式写下所需的类型。

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