考虑以下场景:
class A
{
public:
int a;
A(int _a) : a(_a) {}
};
void Get(std::vector<A*>& vec)
{
A* a1 = new A(5);
A* a2 = new A(50);
A* a3 = new A(500);
vec.push_back(a1);
vec.push_back(a2);
vec.push_back(a3);
}
int main()
{
// Scenario 1
auto vec = std::vector<A*>();
Get(vec);
for(auto* v : vec)
std::cout << v->a << std::endl;
// Scenario 2:
auto vecvoid = std::vector<void*>();
vecvoid.assign(vec.begin(), vec.end());
for(auto* v : vecvoid)
std::cout << static_cast<A*>(v)->a << std::endl;
return 0;
}
在场景 2 中,是否可以将 vecvoid
直接传递给 Get()
(无需重载/修改 Get()
) 而不是使用如上所示的两步方法(函数调用后调用 vector::assign()
)?
最佳答案
幸运的是,这是不可能的。
std::vector<A*>
和 std::vector<void*>
是不相关的类型。
考虑一下如果可能会发生什么:
void G(std::vector<A*>& vec)
{
*vec[0] = A(7);
}
// ...
int x = 0;
std::vector<void*> v = { &x };
G(v); // Oops.
关于c++ - 当需要特定类型的 vector 时,通过引用传递空指针 vector ,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/48093320/