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::atconst。你想使用dic[i]

详细信息:由于 Qt 的容器是写时复制的,因此非常量访问器本质上更昂贵,因为它们必须首先检查是否需要复制底层数据(并在必要时复制它)。因此,在 Qt 中,at(i) 将比 operator[] 快。遗憾的是,这与 STL 正好相反,例如,std::vector&lt;T&gt;::at(i) 进行边界检查,因此比 std::vector&lt;T&gt;::operator[](i) 稍微贵一些。

【讨论】:

以上是关于QT & C++:传递 'const QString' 丢弃限定符的主要内容,如果未能解决你的问题,请参考以下文章

Qt Creator 不能使用 const char*

传递给第三方 API 时的 C++ const std:string& 安全性

通过引用传递使用 const 有啥意义? C++ [重复]

在 C++ 中,通过引用传递 const long double 是不是很好?

C++ 使用const 引用传递参数

通过 const 引用传递对象?