为什么const不起作用

时间:2015-02-19 08:00:43

标签: c++ const

class Student{
public:
    Student();
    Student(string name, int score);
    string getName();
    int getScore();
    void insert(string name, int score);
    friend ostream& operator<<(ostream& os, const Student& student){
        os << "Name: "<<student.name<<",Score:"<<student.score<<endl;
        return os;
    }
 private:
    string name;
    int score;

};


string Student::getName(){
    return name;
}
int Student::getScore(){
    return score;
}

我定义了上面的类

和main函数我定义了一个比较函数

int compStudent(const Student &student1, const Student &student2){
    int score1 = student1.getScore();
    int score2 = student2.getScore();
    if(score1 == score2) return 0;
    if(score1<score2) return -1;
    return 1;
}

然后错误说这个参数是const但函数不是const。

然后我删除了const,它的工作原理是什么?

2 个答案:

答案 0 :(得分:3)

为了能够在getScore()对象上调用const,需要声明该方法const

class Student{
    ...
    int getScore() const;
    ...
};


int Student::getScore() const {
    return score;
}

请参阅Meaning of "const" last in a C++ method declaration?进行讨论。

答案 1 :(得分:0)

该行

int score1 = student1.getScore();

在student1上调用getScore()方法,这是一个const引用。但是getScore()方法不是const方法(它不承诺不修改student1)。

要解决此问题,请修改方法以指示它是const:

class Student {
    // ...
    int getScore() const;
    // ...
};