gpt4 book ai didi

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

转载 作者:太空狗 更新时间:2023-10-29 19:38:16 24 4
gpt4 key购买 nike

我在使用它时遇到了问题,

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;
}

而且我不能使用泛型来满足我的需要。

提前致谢。

最佳答案

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

当你写的时候

void * pointer = a;

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

由此,您无法取回数组,但您可以获得指向第一个元素的指针:

A* b = static_cast<A*>(pointer);

(注意:在指向不相关类型的指针之间进行转换需要 reinterpret_cast,但转换为 void* 是隐式的并且来自 void*指向任何其他指针,这可以使用 static_cast 来完成。)

关于c++ - 从 void* 转换为 C++ 中的对象数组,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/3917240/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com