explicit關(guān)鍵字用法
explicit關(guān)鍵字用于取消構(gòu)造函數(shù)的隱式轉(zhuǎn)換,對(duì)有多個(gè)參數(shù)的構(gòu)造函數(shù)使用explicit是個(gè)語(yǔ)法錯(cuò)誤。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:
Using the explicit keyword, a constructor is declared to beclass?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
}
"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);
posted on 2006-04-19 21:11 芥之舟 閱讀(2476) 評(píng)論(0) 編輯 收藏 引用 所屬分類: C/C++