Qt忽略const说明符

fas*_*ked 0 c++ qt const qt4

我创建了简单的代码片段,以显示我注意到的奇怪行为.而已:

#include <QCoreApplication>
#include <QLineEdit>

class MyObject : public QWidget
{
public:
    explicit MyObject(QWidget *parent = 0) : QWidget(parent) {
        editor = new QLineEdit(this);
    }

    void setValue(const QString &s) const {
        editor->setText(s);
        editor->setReadOnly(true);
        editor->setMaxLength(s.length());
    }

private:
    QLineEdit *editor;
};

int main(int argc, char **argv)
{
    QCoreApplication app(argc, argv);
    return app.exec();
}
Run Code Online (Sandbox Code Playgroud)

MyObject::setValue函数有const说明符,但这段代码编译得很好.需要注意的是setText,setReadOnlysetMaxLength功能都没有const:

void setText(const QString &);
void setReadOnly(bool);
void setMaxLength(int);
Run Code Online (Sandbox Code Playgroud)

我只是想知道导致这种行为的原因是什么?我使用Qt 4.7.4和MingGW 4.6.2.

Nik*_* C. 5

(这不是Qt相关的.这是一个普通的C++问题.)

编译器是正确的,因为您没有修改editor.你要修改的是*editor; 你只是修改它指向的对象.的const说明符将只禁止改变直接包含在对象的成员.该对象editor指向的不是成员,因此可以修改:

void setValue(const QString &s) const {
    editor->setText(s); // OK
    editor = new QLineEdit; // Error: 'editor' is changed.
}
Run Code Online (Sandbox Code Playgroud)