1
class
T
2 {
3 public :
4 T( int t){}
5 };
6 void foo(T t)
7 {
8 return ;
9 }
10 int main()
11 {
12 T t( 3 );
13 foo( 3 ); // 此时会将3隐式转换为T
14
15 return 0 ;
16 }
17
通explicit关键字可以禁止这种隐式转换
2 {
3 public :
4 T( int t){}
5 };
6 void foo(T t)
7 {
8 return ;
9 }
10 int main()
11 {
12 T t( 3 );
13 foo( 3 ); // 此时会将3隐式转换为T
14
15 return 0 ;
16 }
17
1
class
T
2 {
3 public :
4 explicit T( int t){}
5 };
6 void foo(T t)
7 {
8 return ;
9 }
10
11 int main()
12 {
13 T t( 3 );
14 foo( 3 ); // 编译器报错error: conversion from ‘int’ to non-scalar type ‘T’ requested
15
16 return 0 ;
17 }
看到过说对有多个参数的构造函数使用
explicit
是个语法错误。2 {
3 public :
4 explicit T( int t){}
5 };
6 void foo(T t)
7 {
8 return ;
9 }
10
11 int main()
12 {
13 T t( 3 );
14 foo( 3 ); // 编译器报错error: conversion from ‘int’ to non-scalar type ‘T’ requested
15
16 return 0 ;
17 }
但是用gcc好像这样不报错
g++ -O2 -Wall -o tt tt.cpp
1
class
T
2 {
3 public :
4 explicit T( int t, int s){}
5 };
6 void foo(T t)
7 {
8 return ;
9 }
10
11 int main()
12 {
13 T t( 3 , 4 );
14 return 0 ;
15 }
16
2 {
3 public :
4 explicit T( int t, int s){}
5 };
6 void foo(T t)
7 {
8 return ;
9 }
10
11 int main()
12 {
13 T t( 3 , 4 );
14 return 0 ;
15 }
16