我写了一个在STL中运行良好的循环,但是我已经尝试使用正确的QTL数据类型并且它给了我错误:
error: passing 'const QString' as 'this' argument of 'QString& QString::operator=(char)' discards qualifiers [-fpermissive]
dic.at(i) = char(i);
我尝试运行的完整代码是:
QVector <QString> dic ( 256 );
for(int i = 0; i < 256; i++)
{
dic.at(i) = char(i);
}
我不太确定我的代码需要更新什么,有什么想法吗?
答案 0 :(得分:9)
QVector::at
是const
。您想使用dic[i]
。
详细信息:由于Qt的容器是写时复制的,因此非const访问器本质上更昂贵,因为他们必须首先检查是否需要复制基础数据(并在必要时复制它)。因此,在Qt中,at(i)
将比operator[]
更快。遗憾的是,这与STL相反,例如,std::vector<T>::at(i)
确实会检查边界,因此比std::vector<T>::operator[](i)
略贵。