在我的for循环中声明迭代器时研究无符号与有符号整数比较警告,I read this:
尽可能使用您要比较的确切类型(例如,与
std::string::size_type
的长度进行比较时使用std::string
。
我有一个QList<T>
我想迭代,使用上面的方法声明迭代器:
for(QList::size_type i = 0; i < uploads.size(); i++)
{
//Do something
}
它给了我一个编译器错误:
error: 'template<class T> class QList' used without template parameters
for(QList::size_type i = 0; i < uploads.size(); i++)
为什么我不能以同样的方式使用它?这是由我还是由Qt框架及其类型引起的?在这种情况下,QList::size_type
的唯一替代是QList::size()
,只返回常规的旧int
,我想使用它;但我读了上面链接的帖子,这让我不确定。
答案 0 :(得分:7)
QList
是一个类模板,这意味着您应该在使用时指定模板参数,例如: QList<int>
和QList<int>::size_type
。
BTW:std::string
是std::basic_string的实例化,它是一个定义为std::basic_string<char>
的typedef。因此,std::string::size_type
实际上相当于std::basic_string<char>::size_type
。
答案 1 :(得分:6)
你不能以同样的方式使用它,因为它们不是同一个东西。 std::string
实际上是std::basic_string<char>
的别名,这就是您在使用时不必指定模板类型的原因。
由于Qlist
不是别名而且是模板类型,因此您必须使用
QList<some_type>::size_type
你可以做的一件事就是制作自己的别名,比如
using QIntList = QList<int>;
然后你可以
QIntList::size_type