INFO: Initializing const Member Data (92614)



The information in this article applies to:

  • Microsoft Visual C++ 1.0
  • Microsoft Visual C++ 1.5
  • Microsoft Visual C++ 1.51
  • Microsoft Visual C++ 2.0
  • Microsoft Visual C++ 2.1
  • Microsoft Visual C++ 4.0
  • Microsoft Visual C++, 32-bit Enterprise Edition 5.0
  • Microsoft Visual C++, 32-bit Professional Edition 5.0

This article was previously published under Q92614
The sample source code below demonstrates how to initialize a const member of a class. Note that the code uses a member initialization list because a const member may not appear on the left side of the assignment operator. The value must be set when the object is constructed because the value of a const member can be set only at initialization.

If an application attempts to initialize a const member with the assignment operator, the compiler generates the following error messages:
error C2758: 'a' : must be initialized in constructor base/member initializer list

error C2166: lvalue specifies const object
Using Visual C++ 32-bit Edition, version 4.0, this error is reported as:
error C2166: l-value specifies const object
The member initialization list is the preferred method to initialize the members of a class. For example, when initializing an object of a user- defined type, it is more efficient to use a member initialization list to initialize a data member than to perform an assignment in the constructor. The latter approach requires two calls: one to construct the data member and another to the operator=() function to assign a value to the member.

Sample Code

/*
 * Compile options needed: none
 */ 

#include <iostream.h>

class demo
{
   const int a;

public:
   demo(int val = 0) : a(val) {}
   int get_a(void) { return a; }
};

void main()
{
   demo first;
   demo second(5);

   cout << "First = " << first.get_a() << endl;

   cout << "Second = " << second.get_a() << endl;
}
		

Output

First = 0
Second = 5
		

SUMMARY


Modification Type:MajorLast Reviewed:12/11/2003
Keywords:kbinfo kbLangCPP KB92614