1. 程式人生 > >void const f() vs void f() const

void const f() vs void f() const

void const f() is equivilent to const void f(), which means the return type (in this case a void) is const. This is totally meaningless not only because it's a void (there is nothing there that needs a const qualifier), but also because it's a return type (returning something as const doesn't make a whole lot of sense).void f() const

 makes the function itself const. This only really has meaning for member functions. Making a member function const means that it cannot call any non-const member functions, nor can it change any member variables. It also means that the function can be called via a const object of the class:

class A
{
public:
  void Const_No();   // nonconst member function
  void Const_Yes() const; // const member function
};


//-----------

A  obj_nonconst;  // nonconst object
obj_nonconst.Const_No();  // works fine
obj_nonconst.Const_Yes(); // works fine

const A obj_const = A(); // const object
obj_const.Const_Yes(); // works fine (const object can call const function)
obj_const.Const_No();  // ERROR (const object cannot call nonconst function)