转换函数与explicit
转换函数
C++中存在转换一种特殊的函数–转换函数,它没有返回值,作用是将我们的对象转换成其他任意的类型,这个函数常常是由编译器自动调用的。
1 | class Fraction { |
non-explicit构造函数
non-explicit构造函数是能被编译器隐式调用的构造函数,用于在需要的时候自动将某些数据转变成对象,当non-explicit构造函数只需要填一个参数的时候,就能够起到和转换函数类似的效果。
但是这样的隐式调用可能会带来意想不到的麻烦,看下面的例子:
1 | // 承接上面例子 |
此时就需要explicit
关键字了,在Fraction的构造函数上加上这个关键字explicit Fraction(int num, int den = 1)
,编译器就不会隐式调用构造函数,就不会产生歧义。
参考
侯捷 c++程序设计