Go back to Richel Bilderbeek's homepage.

Go back to Richel Bilderbeek's C++ page.

 

 

 

 

 

(C++) const method

 

A const method is a method that is const will not change the value of its class members when called.

 

In class design, a const method reflects a read-only method.

 

Consider making all getters const methods.

 

Exercise 5: the many types of const is an exercise about the many types of const.

 

Avoid duplication in const and non-const member functions [7][8].

 

 

 

 

Keeping a read-only method const using mutable

 

In a class, when you see the following member function:

 

struct MyClass
{
  double GetValue() const { /* SOMETHING */ }
};

 

 

You know it's a function that does not alter the member variables or the class.

 

But imagine that getting this value is a very time-intensive process. Then you might want the class to also store the amount of times this function has been called. Then you would use:

 

struct MyClass
{
  double GetValue()
  {
    ++mRequests; //A member variable
    return mValue;
  }
};

 

Although this is one of those occasions to use mutable, as every programmer expects a getter to be const:

 

struct MyClass
{
  double GetValue() const
  {
    ++mRequests; //A member variable
    return mValue;
  }
  private:
  mutable int mRequests;
};

 

Use const whenever possible [1-5].

 

 

 

 

 

References

 

  1. Bjarne Stroustrup. The C++ Programming Language (3rd edition). 1997. ISBN: 0-201-88954-4. Chapter 7.9.3: 'Use const extensively and consistently'
  2. Scott Meyers. Effective C++ (3rd edition). ISBN: 0-321-33487-6. Item 3: 'Use const whenever possible'
  3. Jarrod Hollingworth, Bob Swart, Mark Cashman, Paul Gustavson. Sams C++ Builder 6 Developer's Guide. ISBN: 0-672-32480-6. Chapter 3: 'Understand and use const in your code'
  4. Jesse Liberty. Sams teach yourself C++ in 24 hours. 2001. ISBN: 0-672-32224-2. Hour 8, chapter 'Const member functions': 'Use const whenever possible.'
  5. Scott Meyers. Effective C++ (3rd edition). ISBN: 0-321-33487-6. Item 2: 'Prefer consts, enums and inlines to #defines'
  6. Herb Sutter, Andrei Alexandrescu. C++ coding standards: 101 rules, guidelines, and best practices. 2005. ISBN: 0-32-111358-6. Item 15: 'Use const proactively'
  7. Herb Sutter, Andrei Alexandrescu. C++ coding standards: 101 rules, guidelines, and best practices. 2005. ISBN: 0-32-111358-6. Chapter 94: 'Avoid casting away const', item 'Exceptions'
  8. Scott Meyers. Effective C++ (3rd edition). ISBN: 0-321-33487-6. Item 3, paragraph 'Avoid duplication in const and non-const member functions'

 

 

 

 

 

Go back to Richel Bilderbeek's C++ page.

Go back to Richel Bilderbeek's homepage.

 

Valid XHTML 1.0 Strict