从void*转换为c ++中的对象数组

Swa*_*ppy 3 c++ arrays casting void-pointers

我有问题让这个工作,

class A {
public:
    A(int n) {
        a = n;
    }
    int getA() {
        return a;
    }
private:
    int a;
};

int main(){

    A* a[3];
    A* b[3];

    for (int i = 0; i < 3; ++i) {
        a[i] = new A(i + 1);
    }

    void * pointer = a;

    b = (A* [])pointer;  // DOESNT WORK Apparently ISO C++ forbids casting to an array type ‘A* []’.
    b = static_cast<A*[]>(pointer); // DOESN'T WORK invalid static_cast from type ‘void*’ to type ‘A* []’

    return 0;
}
Run Code Online (Sandbox Code Playgroud)

我不能使用通用类型来满足我的需求.

提前致谢.

sbi*_*sbi 10

数组是C中的二等公民(因此在C++中).例如,您无法分配它们.并且很难将它们传递给函数,而不会将它们降级为指向其第一个元素的指针.
对于大多数用途,指向数组的第一个元素的指针可以像数组一样使用 - 除非您不能使用它来获取数组的大小.

当你写作

void * pointer = a;
Run Code Online (Sandbox Code Playgroud)

a隐式转换为指向其第一个元素的指针,然后将其转换为void*.

从那里,您不能返回数组,但您可以获得指向第一个元素的指针:

A* b = static_cast<A*>(pointer);
Run Code Online (Sandbox Code Playgroud)

(注意:在指向不相关类型的指针之间reinterpret_cast进行转换需要a ,除了void*隐式的转换和从void*任何其他指针转换,可以使用a来完成static_cast.)


Ben*_*igt 8

也许你的意思是做

memcpy(b, (A**)pointer, sizeof b);
Run Code Online (Sandbox Code Playgroud)

一个static_cast版本也是可能的.