QT & C++:传递 'const QString' 丢弃限定符
Posted
技术标签:
【中文标题】QT & C++:传递 \'const QString\' 丢弃限定符【英文标题】:QT & C++ : Passing 'const QString' discards qualifiersQT & C++:传递 'const QString' 丢弃限定符 【发布时间】:2014-06-24 03:05:00 【问题描述】:我编写了一个在 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);
不太确定我需要在我的代码中更新什么,有什么想法吗?
【问题讨论】:
【参考方案1】:QVector::at
是const
。你想使用dic[i]
。
详细信息:由于 Qt 的容器是写时复制的,因此非常量访问器本质上更昂贵,因为它们必须首先检查是否需要复制底层数据(并在必要时复制它)。因此,在 Qt 中,at(i)
将比 operator[]
快。遗憾的是,这与 STL 正好相反,例如,std::vector<T>::at(i)
进行边界检查,因此比 std::vector<T>::operator[](i)
稍微贵一些。
【讨论】:
以上是关于QT & C++:传递 'const QString' 丢弃限定符的主要内容,如果未能解决你的问题,请参考以下文章
传递给第三方 API 时的 C++ const std:string& 安全性