c++ - 如果你有两个全局函数,一个用于 `Widget`,另一个用于 `double`,而 `Widget` 类定义了 cast-to-double,会发生什么?
问题描述
我的问题是转换函数(用户定义的强制转换)是否优先于直接调用。
假设你重载了一个函数:
void display_widget( double f );
void display_widget( Widget a );
我的问题是,它具有更高的优先级:
- 一个转换函数(用户定义的转换)接受一个
Widget
并返回一个double
- 在其参数列表中
display_widget
具有 a的函数double
#include <iostream>
class Widget {
public:
Widget() : d{ 0.0 } {};
double get_d() { return d; }
operator double() {
std::cout << "operator double() was called" << std::endl;
return d;
}
private:
double d;
};
void display_widget( double widget ) {
std::cout << "The double is: " << widget << std::endl;
}
void display_widget( Widget widget ) {
std::cout << "The Widget is: " << widget.get_d() << std::endl;
}
int main(int argc, char* argv[]) {
Widget a{ 79.99 };
display_widget(a);
return 0;
}
请注意,我们有两个display_widget
函数,一个接受一个Widget
,另一个接受一个double
考虑以下行main
:
display_widget(a);
我们将看到以下哪个打印语句序列?
+----------------------+------------------------------+
| option 1 | option 2 |
+----------------------+------------------------------+
| The Widget is: 79.99 | operator double() was called |
| | The double is: 79.99 |
+----------------------+------------------------------+