我有两个向量:
std::vector<const A> v_a;
std::vector<B> v_b;
在程序v_a
期间填充了值。
现在,我想将类型A
的值转换为B
并填充v_b
。
我首先调整v_b
的大小,请注意std :: transform ist不适用于我:
v_b.resize(v_a.size()); // Auto-construct new elements using default c-tor
这将导致以下警告:
Value Conversion Issue
-Wsign-conversion
202:55: warning: implicit conversion changes signedness: 'std::vector<const A, std::allocator<const A> >::size_type' (aka 'int') to 'std::vector<B, std::allocator<B> >::size_type' (aka 'unsigned long long')
向量size_type怎么可能是int,它至少应该是无符号的?
两个向量怎么可能具有不同的size_type?即使它们在不同的源文件中定义,编译器也应使用相同的类型。 可以修改size_type吗?
如何在不产生新警告的情况下(安全)检查v_a.size() < v_b.max_size()
?
QT-Creator声明我使用“ Microsof Visual C ++编译器15.0(amd64)”作为编译器。
答案 0 :(得分:3)
vector
的{{1}}是size_type
的可能性如何,应该 至少是未签名的?
这是实现问题。对于[container.requirements.general]/4,int
是无符号整数类型,其中X::size_type
是容器。 X
是一个容器。
两个
vector
有不同的vector
怎么可能? 即使它们在不同的源文件中定义,编译器也应该 使用相同的类型。
不完全是。两个size_type
(具有不同的元素类型或分配器类型)可以自由地具有不同的vector
,只要它们是无符号整数类型并且可以表示相应{{1 }}。
是否可以修改
size_type
?
不。您不能直接更改库。
如何(安全)检查是否
difference_type
没有 产生新的警告?
对于当前情况,您可以使用强制转换作为解决方法。
size_type
再次,无论如何这都是实现的错误,这不是你的错。
答案 1 :(得分:3)