我有两个向量:
std::vector<const A> v_a;
std::vector<B> v_b;
Run Code Online (Sandbox Code Playgroud)
在程序v_a中充满了价值。现在我想将 type 的值转换A为B和 fill v_b。
我首先调整大小v_b,请注意 std::transform 对我不起作用:
v_b.resize(v_a.size()); // Auto-construct new elements using default c-tor
Run Code Online (Sandbox Code Playgroud)
这会导致以下警告:
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')
Run Code Online (Sandbox Code Playgroud)
向量 size_type 怎么可能是 int,它至少应该是一个无符号的?
两个向量怎么可能有不同的 size_types?即使它们在不同的源文件中定义,编译器也应该使用相同的类型。是否可以修改 size_type?
我如何(安全地)检查是否v_a.size() < v_b.max_size()不产生新警告?
QT-Creator 声明我使用“Microsof Visual C++ Compiler 15.0 (amd64)”作为编译器。
a
vector的size_typeis怎么可能int,它至少应该是一个未签名的?
这是实现上的问题。Per [container.requirements.general]/4,X::size_type是一个无符号整数类型,其中X是一个容器。Avector是一个容器。
两个
vectors怎么可能有不同的size_types?即使它们在不同的源文件中定义,编译器也应该使用相同的类型。
不完全是。两个vectors(具有不同的元素类型或分配器类型)可以自由拥有不同的size_types,只要它们是无符号整数类型并且可以表示相应difference_type.
可以修改
size_type吗?
不可以。您不能直接更改库。
我如何(安全地)检查是否
v_a.size() < v_b.max_size()不产生新警告?
对于您当前的情况,您可以使用强制转换作为解决方法。
v_b.resize(static_cast<std::vector<B>::size_type>(v_a.size()));
Run Code Online (Sandbox Code Playgroud)
同样,无论如何,这都是实现的错误,这不是您的错。