C++ 如何处理std::vector<>;::大小\u类型为int

C++ 如何处理std::vector<>;::大小\u类型为int,c++,types,C++,Types,我有两个向量: std::vector<const A> v_a; std::vector<B> v_b; 这将导致以下警告: Value Conversion Issue -Wsign-conversion 202:55: warning: implicit conversion changes signedness: 'std::vector<const A, std::allocator<const A> >::size_type'

我有两个向量:

std::vector<const A> v_a;
std::vector<B> v_b;    
这将导致以下警告:

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')
值转换问题
-Wsign转换
202:55:警告:隐式转换将符号性:“std::vector::size_-type”(又名“int”)更改为“std::vector::size_-type”(又名“unsigned long long”)
向量大小_类型怎么可能是int,它至少应该是无符号的

两个向量的大小和类型如何可能不同?即使它们是在不同的源文件中定义的,编译器也应该使用相同的类型。 是否可以修改尺寸类型

如何(安全地)检查
v_a.size()
而不产生新的警告


< > QT创建者表示,我使用“MICROSMOVE Visual C++编译器15(AMD64)”作为编译器。 一个
向量
大小类型
int
,它应该 至少是一个未签名的

这是实施中的一个问题。Per,
X::size\u type
是一个无符号整数类型,其中
X
是一个容器。向量是一个容器

两个
向量
s的
大小\u类型如何可能不同?
即使它们是在不同的源文件中定义的,编译器也应该
使用相同的类型

不完全是。两个
向量
s(具有不同的元素类型或分配器类型)可以自由地具有不同的
大小_类型
s,只要它们是无符号整数类型并且可以表示相应
差异_类型
的任何非负值

是否可以修改
尺寸\u类型

不可以。您不能直接更改库

我如何(安全地)检查没有 产生新的警告

对于您当前的情况,可以使用强制转换作为解决方法

v_b.resize(static_cast<std::vector<B>::size_type>(v_a.size()));
v_b.resize(静态转换(v_a.size());
再说一遍,这是实现中的一个bug,不是您的错。

感谢您回答这些问题

正如AMA所指出的,真正的问题是在
v_a
的类型参数中使用
const
。这会导致一个编译器错误,并最终导致我在问题中提出的警告


解决方案是删除const限定符并修复依赖类型。

您能提供一个最小且可重复的示例吗?如果没有限制,我倾向于将此问题视为虚构
std::vector::size_type
被标准指定为无符号类型,很难想象任何实现都有符号和无符号的专门化。听起来像是实现的一个bug。
std::VectorVector相同类型的向量也应该有相同的
size_type
,否?@formerlyknownas_463035818是。另一方面,
vector
vector
不是同一类型。除非
A
B
不同,否则您无法知道。通常,你真的不知道两个tpyes是否实际上是相同的(除非你明确地检查)。无论如何,我只是吹毛求疵,建议将“两个向量可以自由拥有不同的”改为“两个不同类型的向量…”@formerlyknownas_463035818让我们进一步包括“不同的元素类型或分配器类型”;-)这正是我的意思。具有不同元素类型的向量是不同类型的向量
v_b.resize(static_cast<std::vector<B>::size_type>(v_a.size()));