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()));