简单地讲,explicit constructor就是禁止隐式的类型转换,比如下面的代码:
1
#include
<
iostream
>
2 using std::cout;
3 using std::endl;
4 class complexNumbers {
5 double real, img;
6 public :
7 complexNumbers() : real( 0 ), img( 0 ) { }
8 complexNumbers( const complexNumbers & c) { real = c.real; img = c.img; }
9 explicit complexNumbers( double r, double i = 0.0 ) { real = r; img = i; }
10 friend void display(complexNumbers cx);
11 };
12 void display(complexNumbers cx){
13 cout << " Real Part: " << cx.real << " Imag Part: " << cx.img << endl;
14 }
15 int main() {
16 complexNumbers one( 1 );
17 display(one);
18 complexNumbers two = 2 ; // 错误!必须显示地进行类型转换
19 display( 200 ); // error: conversion from ‘int’ to non-scalar type ‘complexNumbers’ requested
20 return 0 ;
21 }
2 using std::cout;
3 using std::endl;
4 class complexNumbers {
5 double real, img;
6 public :
7 complexNumbers() : real( 0 ), img( 0 ) { }
8 complexNumbers( const complexNumbers & c) { real = c.real; img = c.img; }
9 explicit complexNumbers( double r, double i = 0.0 ) { real = r; img = i; }
10 friend void display(complexNumbers cx);
11 };
12 void display(complexNumbers cx){
13 cout << " Real Part: " << cx.real << " Imag Part: " << cx.img << endl;
14 }
15 int main() {
16 complexNumbers one( 1 );
17 display(one);
18 complexNumbers two = 2 ; // 错误!必须显示地进行类型转换
19 display( 200 ); // error: conversion from ‘int’ to non-scalar type ‘complexNumbers’ requested
20 return 0 ;
21 }