将vector <int>转换为vector <long>时它们的大小相同?

时间:2016-11-02 21:15:39

标签: c++ casting reference

我有一个函数,它引用了longs的向量

Void blarf(std::vector<long>&);

这是给定的,不应该被修改。深入xyz.cpp是尝试向blarf() vector int提供{<1}}:

std::vector<int>  gooddata;
. . . 
blarf(gooddata);

在我的案例和此软件的所有案例中,intlong的大小相同。当然,我也无法改变gooddata的定义。

什么样的类型转换适合这里?我尝试了dynamic_cast,但这仅适用于多态类转换。 static_cast也没有用。我对c ++类型演员来说不是天才。

1 个答案:

答案 0 :(得分:7)

不,你不能。 <{1}}和int将保持不同的类型,这会破坏严格的别名规则。

您可以非常轻松地从long创建vector<long>

vector<int>

这会将std::vector<int> vec{5, 3, 7, 9}; std::vector<long> veclong(begin(vec), end(vec)); 复制到vec,其中veclong的构造函数需要两个迭代器。

如果你想以不好的方式(即展示未定义的行为),那么随意使用:

vector