复合类型的动态数组

问题描述 投票:1回答:1

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

    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
c++ new-operator
1个回答
6
投票

似乎您要创建一个动态数组,其中元素类型为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。


-1
投票

您能否提供更多信息?无法真正理解您想做什么。您要使用char指针创建二维数组吗?

© www.soinside.com 2019 - 2024. All rights reserved.