繁体   English   中英

C ++自动类型转换

[英]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.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM