把' const'在声明类中的函数之前

时间:2018-03-15 08:30:07

标签: c++

我对以下代码有疑问。当它在类中声明函数get_name()时,将const放在它前面的目的是什么。如果我把它取下来会发生什么?

class College

{

string name;

const string get_name()

{ return name; }

void set_name(string n)

 { name = n; }

};

int main()

{

   College college_obj;

    return 0;

}

2 个答案:

答案 0 :(得分:2)

const string get_name()

表示返回值是常量对象。它阻止函数的调用者在临时返回值上调用非const方法,例如

x.get_name() = "bla"
x.get_name()[0] = 'a';

不会编译。

我认为其中一个主要动机是防止意外分配,例如在if语句中:

if (x.get_name() = "John Doe"))

It has been a guideline for some time,但C ++ 11通过引入rvalue引用和移动语义使其过时。

在您的示例中,ypu应该返回对name的const引用。这将为您节省临时对象的创建并保持const的好处。并且该方法应声明为const,因为它不会修改对象的状态。

const& get_name() const { return name; };

答案 1 :(得分:2)

我想补充一点

const string get_name()

某种程度上没有意义,因为它返回一个新对象。你为什么要声明这个const
嗯,当然总有原因,但我通常不会使用它。

返回引用时,const的使用更为重要。然后你会区分:

const string& get_name() const;

string& get_name();