我很惊讶编译器自动将一个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)
我明白这很酷,但我很惊讶.问候
这是因为您没有告诉编译器您的构造函数只能显式使用.这意味着它可以对您的类进行隐式类型转换.
要使构造函数显式化,因此不能在类似这样的类型转换中使用它,请声明它explicit:
explicit CCoolClass(long numerator = 0, long denominator = 1);
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
125 次 |
| 最近记录: |