我有一个函数,它引用了longs的向量
Void blarf(std::vector<long>&);
这是给定的,不应该被修改。深入xyz.cpp是尝试向blarf()
vector
int
提供{<1}}:
std::vector<int> gooddata;
. . .
blarf(gooddata);
在我的案例和此软件的所有案例中,int
和long
的大小相同。当然,我也无法改变gooddata
的定义。
什么样的类型转换适合这里?我尝试了dynamic_cast
,但这仅适用于多态类转换。 static_cast
也没有用。我对c ++类型演员来说不是天才。
答案 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