Explicit conversion



 DEVELOP > c-Plus-Plus > Explicit conversion

LINK TO THIS PAGE  


rating :  0   |  0


  Page 1 of 1

1

 
Topic: DEVELOP > c-Plus-Plus
User: "Stub"
Date: 12 Nov 2003 12:39:12 PM
Object: Explicit conversion
Docs says that "The compiler does not use an explicit constructor to
implement an implied conversion of types. It's purpose is reserved
explicitly for construction."
I put up code of three cases at the bottom. Hope you can help me understand
the "explicit" keyword and its usage. Specifically,
Is "explicit" keyword only associated with constructor in C++?
What's "implied conversion of types"?
Is "ExClass Ex=5;" so-called implied conversion since it converts an int
into ExClass type? If so then why "ExClass Ex(5);" is not since it calls a
conversion constructor?
Thank you for your help!
Case 1:
---------------
struct ExClass{
explicit ExClass(int) { cout << "explicit conversion"; }
ExClass(long) { cout << "implicit conversion"; }
};
int main (){
ExClass Ex=5;
return 0;
}
OUTPUT:
implicit conversion
Case 2:
----------------
struct ExClass{
ExClass(int) { cout << "explicit conversion"; }
ExClass(long) { cout << "implicit conversion"; }
};
int main (){
ExClass Ex=5;
return 0;
}
OUTPUT:
explicit conversion
Case 3:
-------------------
struct ExClass{
ExClass(int) { cout << "explicit conversion"; }
ExClass(long) { cout << "implicit conversion"; }
};
int main (){
ExClass Ex(5);
return 0;
}
OUTPUT:
explicit conversion
.

User: "Michael Kochetkov"

Title: Re: Explicit conversion 12 Nov 2003 03:05:08 PM
"Stub" <stub@asof.com> wrote in message
news:k7vsb.52956$Ec1.3404724@bgtnsc05-news.ops.worldnet.att.net...

Docs says that "The compiler does not use an explicit constructor to
implement an implied conversion of types. It's purpose is reserved
explicitly for construction."

I put up code of three cases at the bottom. Hope you can help me

understand

the "explicit" keyword and its usage. Specifically,

Is "explicit" keyword only associated with constructor in C++?

I would read it as "... with a constructor in C++?" if you do not mind. Then
no, the "explicit" keyword deals with constructors declarations only withing
class declarations.


What's "implied conversion of types"?

Let us say, an object "a" of type A may be implicitly converted to a type B
if and only if the B b = a; declaration exists.


Is "ExClass Ex=5;" so-called implied conversion since it converts an int
into ExClass type?

If you do not mind the definition above then it is so by definition.

If so then why "ExClass Ex(5);" is not since it calls a
conversion constructor?

The expression above is the direct initialization. Direct initializations
are a kind of explicit initialization.



Thank you for your help!


Case 1:
---------------
struct ExClass{
explicit ExClass(int) { cout << "explicit conversion"; }
ExClass(long) { cout << "implicit conversion"; }
};

int main (){
ExClass Ex=5;
return 0;
}

OUTPUT:
implicit conversion

Yes, it is. It is so by definition. I see, that your compiler is not an
Intel-made one. Though it looks like other EDG-base compilers can handle it
right.



Case 2:
----------------
struct ExClass{
ExClass(int) { cout << "explicit conversion"; }
ExClass(long) { cout << "implicit conversion"; }
};

int main (){
ExClass Ex=5;
return 0;
}

OUTPUT:
explicit conversion

ExClass is the best conversion as far as 5 is of type int.



Case 3:
-------------------
struct ExClass{
ExClass(int) { cout << "explicit conversion"; }
ExClass(long) { cout << "implicit conversion"; }
};

int main (){
ExClass Ex(5);
return 0;
}

OUTPUT:
explicit conversion

Direct initialization is the explicit conversion indeed.
Other explicit conversions are:
explicit cast conversion in cast notation: ExClass Ex = (ExClass)5;
static_cast expression: ExClass Ex = static_cast<ExClass>(5);
I cannot think out the explicit cast conversion in functional notation -- it
constantly leads my to direct initialization. But it might be applicable
too.
--
Michael Kochetkov.
.


  Page 1 of 1

1

 


Related Articles
 

NEWER

pg.1232     pg.940     pg.716     pg.544     pg.412     pg.311     pg.234     pg.175     pg.130     pg.96     pg.70     pg.50     pg.35     pg.24     pg.16     pg.10     pg.6     pg.3     pg.1

OLDER