I have forgotten
my Password

Or login with:

  • Facebookhttp://facebook.com/
  • Googlehttps://www.google.com/accounts/o8/id
  • Yahoohttps://me.yahoo.com
Index » Programming » Tutorials » C & C++ » Advanced »

Using Explicit in C++

will\′s Photo
3 Dec 07, 12:31AM
Using Explicit in C++
In C++ it is possible to declare constructors for a class, taking a single parameter, and use those constructors for doing type conversion. For example:
class A {
public:
  A(int);
};
 
void f(A) {}
 
void g()
{
  A a1 = 37;
  A a2 = A(47);
  A a3(57);
  a1 = 67;
  f(77);
}
A declaration like:
A a1 = 37;
says to call the A(int) constructor to create an A object from the integer value. Such a constructor is called a "converting constructor".

However, this type of implicit conversion can be confusing, and there is a way of disabling it, using a new keyword "explicit" in the constructor declaration:
class A {
public:
  explicit A(int);
};
 
void f(A) {}
 
void g()
{
  A a1 = 37;      // illegal
  A a2 = A(47);   // OK
  A a3(57);       // OK
  a1 = 67;        // illegal
  f(77);          // illegal
}

Using the explicit keyword, a constructor is declared to be "nonconverting", and explicit constructor syntax is required:
class A {
public:
  explicit A(int);
};
 
void f(A) {}
 
void g()
{
  A a1 = A(37);
  A a2 = A(47);
  A a3(57);
  a1 = A(67);
  f(A(77));
}

Note that an expression such as:
A(47)
is closely related to function-style casts supported by C++. For example:
double d = 12.34;
  int i = int(d);
Currently you need to be logged in to leave a message.