C++自动类型转换

use*_*004 0 c++ casting

我很惊讶编译器自动将一个Integer转换为我自己定义的Class

CCoolClass(long numerator = 0, long denominator = 1);
Run Code Online (Sandbox Code Playgroud)

我确实超载了运算符+这样

friend CFraction operator + (CCoolClass left, CCoolClass right);
Run Code Online (Sandbox Code Playgroud)

为什么这会起作用而不会导致编译器错误?从整数到CCoolClass的auto-typecast来自哪里?

CCoolClass a = CCoolClass(2,3) + 3;
Run Code Online (Sandbox Code Playgroud)

我明白这很酷,但我很惊讶.问候

Som*_*ude 5

这是因为您没有告诉编译器您的构造函数只能显式使用.这意味着它可以对您的类进行隐式类型转换.

要使构造函数显式化,因此不能在类似这样的类型转换中使用它,请声明它explicit:

explicit CCoolClass(long numerator = 0, long denominator = 1);
Run Code Online (Sandbox Code Playgroud)