我对以下代码有疑问。当它在类中声明函数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;
}
答案 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();