为什么在这个例子中使用“const”?

时间:2012-05-10 10:34:08

标签: c++ const

您好我想知道为什么const在此类的“get”函数中使用了?

class Album {

public:
    Album(string c, Artist* a, string t, int y, int no):barCode(c), artist(a), title(t), year(y), noCopiesSold(no){}
    const string& getBarCode() const {return barCode;}
    Artist* getArtist() const {return artist;}
    const string& getTitle() const {return title;}
    int getYear() const {return year;}
    int getNoCopiesSold() const {return noCopiesSold;}
    void setBarCode(string value) {barCode = value;}
    void setArtist(Artist* value) {artist = value;}
    void setTitle(string value) {title = value;}
    void setYear(int value) {year = value;}
    void setNoCopiesSold(int value) {noCopiesSold = value;}

    friend ostream& operator << (ostream& out, const Album& album)
    {
        out << album.artist->getName() << " " << album.barCode << " " << album.title << " " << album.year << " " << album.noCopiesSold << endl;
        return out;
    }

private:
    string barCode;
    Artist* artist;
    string title;
    int year;
    int noCopiesSold;
};

3 个答案:

答案 0 :(得分:3)

  

为什么“const”在这个类中的“get”函数中使用?

const-correctness

  1. 通过创建函数const,它意味着函数不是 更改其中的任何非静态成员变量,并且不会在其中调用其他非const函数 这个方法
  2. 现在也可以使用const对象调用该函数(否则 导致编译器错误)
  3. 许多库函数都使用const正确的方法;因此,const-correctness使您的方法与之兼容(例如,小于运算符 - bool <Class>::operator < (const Class&) const

答案 1 :(得分:3)

const告诉编译器该方法不会更改对象。这意味着对const个对象(以及非const个对象)进行操作是安全的。它还使编译器能够进行一些优化

答案 2 :(得分:2)

除了函数限定符 - 对于string getter(条形码,标题),您将返回对数据成员的const引用 - 允许引用的值被突变将破坏封装类。

出于这个原因,返回Artist*是不好的(或者最好是可疑的)设计。