隐式类型转换
我们知道调用有参数的构造函数基本有两种方式,如st1和st2:
st1不必多说,原理就是传参,但是st2呢?
实际上,st2属于类型转换,把2这个内置类型先转换成Queue这个自定义类型然后存在临时变量里,然后将这个临时变量拷贝给st2。
隐式类型转换有什么用?
假设要在栈里面存名为A的类。
第一种,先创建A类型变量,然后传入push;
对于第二种,先把1转换为A类型,然后存在临时变量里,date就是这个临时变量的引用。
第二种会方便许多。
隐式类型转换的限制?
发生隐式类型转换实际上就是用传的值(如上面传的1)创建一个类(如上A)的对象充当临时变量,所以一定会经过这个类的构造函数。大部分人认为,隐式类型转换只发生在单个参数的构造函数中(也就是A的构造函数必须是单参数),但实际上多个参数也是支持的!!!:
如A(int n,int m)就是双参数
传参时加上花括号即可。
explicit关键字(只修饰构造函数)
在一些情况下,如果不想构造函数发生类型转换,用explicit修饰构造函数,将会禁止构造函数的隐式转换,比如在上面A类的构造函数前加explicit。