如题
explicit“明确的”。
应用场景:有一个参数的构造函数时,编译时会有一个缺省的转换操作:把该函数对应数据类型的数据转换成该对象:
1 | class String { |
这种隐式转换有时候可能会让人很迷惑:
1 | class String{ |
这样用很正常:
1 | String s2(10);/分配10个字节空间 |
下边这个就:
1 | String s4 = 10;//编译通过,分配10个字节空间 |
s4,s5分别把int型和char型,隐式转换为非配若干个字节的空字符串,让人容易误解。
为此,explicit就派上用场了:
1 | class String { |
下边这种写法正确:
1 | String s6(10);//分配10个字节的空字符串 |
下边就不对了:
1 | String s8 = 10;//编译不通过 |
ps:参考http://www.cnblogs.com/cutepig/archive/2009/01/14/1375917.html,觉得他的例子用的很好。