什么是使函数"const"的意图

And*_*ind 2 c++ const function

像这样,

bool isEmpty() const { return root==NULL; }
Run Code Online (Sandbox Code Playgroud)

这是isEmpty函数,测试BST是否为空.

Alo*_*ave 11

它表示该函数不会修改该类的任何成员.

通常,接口/声明(通过头文件)可供类/函数的用户使用,而不是实现,因此,const用户可以清楚地知道该函数不会修改任何成员.

添加const也会使函数的用户意识到const当你有const一个const对象时应该使用这个成员函数.你不能在该类的对象上调用普通成员函数,它将导致编译器错误.

这就是函数被标记的原因,const即使它是空的.它表示函数实现者和函数用户之间的契约.

  • 如果你有一个const版本的对象,它也是可调用的.非const函数不能从const实例调用. (3认同)
  • @Als你说'const成员函数只能在该类的const对象上调用'.事实并非如此:const成员函数也可以在非const对象上调用:)但是另一种方法是不可能的 (2认同)