advertisement
Premier Club Log In/Registration
  Include Code  Search Tips
TODAY'S HEADLINES  |   ARTICLE ARCHIVE  |   SKILLBUILDING  |   TIP BANK  |   SOURCEBANK  |   FORUMS  |   NEWSLETTERS
Browse DevX
Partners & Affiliates
advertisement
advertisement
Tip of the Day
Average Rating: 4.3/5 | Rate this item | 46 users have rated this item.
Expertise: Beginner
Language: C++
May 6, 1998
The Explicit Keyword
A constructor taking a single argument is by default an implicit conversion operator:
 
	class C {
		int I;
		//...
		public:
		C(int i);//constructor and implicit conversion operator
 			//as well
	};

	void f() {

		C c(0);

c = 5; //implicit conversion of 5 to a C object and 
//then assignment

	}
The compiler re-edits the above sample as if the programmer had written:
 
	//////////////////////////////////////////////////////////////////////////////////////////
	//"c=5;" transformed by the compiler into something like this:
	/////////////////////////////////////////////////////////////////////////////////////////

	C temp(5);//temporary object instantiated,
	c = temp; //assigned using operator =
	temp.C::~C(); //temp's destructor activated
In many cases, this conversion is intentional and well-behaved. But there are cases where such automatic conversion is undesirable, like the following:
 
	class String {
		int size;
		char *p;
		//..
		public:
String (int sz); //constructor & implicit conversion
      				//operator; undesirable in this case
	};
	void f ()
	{
		String s(10);

		//the following is a programmer's typo; yet it is not
 		//detected since it has an unexpected interpretation: 

		s = 100; //bad; 100 is converted to a String and then
 				//assigned to s.
	}	
In order to avoid such implicit conversions, a constructor taking one argument should be declared as explicit:
 
	class String {
		int size;
		char *p;
		//..
		public:
		//no implicit conversion
		explicit String (int sz); //no implicit conversion
		String (const char *s, int size n = 0); //implicit conv.
	};

void f ()
	{
		String s(10);

s = 100; //now compile time error; explicit conversion
  	   //required now:

s = String(100); //fine; explicit conversion
s = "st";//fine; implicit conversion allowed in this case

	}
Danny Kalev
If you have a hot tip and we publish it, we'll pay you. However, due to accounting overhead we no longer pay $10 for a single tip submission. You must accumulate 10 acceptable tips to receive payment. Be sure to include a clear explanation of what the technique does and why it's useful. If it includes code, limit it to 20 lines if possible. Submit your tip here.
Please rate this item (5=best)
 1  2  3  4  5
advertisement
advertisement
Advertising Info  |   Member Services  |   Permissions  |   Help  |   Site Map  |   Network Map  |   About


The Network for Technology Professionals

Search:

About Internet.com

Legal Notices, Licensing, Permissions, Privacy Policy.
Advertise | Newsletters | E-mail Offers