[英]C++ Auto typecast
我很惊讶编译器会自动将Integer转换为我自己定义的Class
CCoolClass(long numerator = 0, long denominator = 1);
我确实让运算符+这样重载
friend CFraction operator + (CCoolClass left, CCoolClass right);
为什么这样做有效,却不会导致编译器错误? 从整数到CCoolClass的自动类型转换从哪里来?
CCoolClass a = CCoolClass(2,3) + 3;
我确实知道这很酷,但是我很惊讶。 问候
这是因为您没有告诉编译器只能显式使用构造函数。 这意味着它可以对类进行隐式类型转换。
为了使构造函数明确,以便不能在此类类型转换中使用它,请声明为explicit
:
explicit CCoolClass(long numerator = 0, long denominator = 1);
这不是类型转换,而是隐式构造函数。 您的构造函数使用默认参数,因此您的代码变为:
CCoolClass a = CCoolClass(2,3) + CCoolClass(3);
...相当于
CCoolClass a = CCoolClass(2,3) + CCoolClass(3,1);
如果像Joachim的回答那样使构造函数显式(因为不允许使用隐式构造),或者没有指定任何默认参数(因为CCoolClass(3)
无效),则会出现CCoolClass(3)
错误。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.