c++ - 如何强制函数参数为同一类型并且不允许使用类型构造函数来匹配给定类型?

标签 c++ visual-studio-2008 visual-c++

在 C++ 中发现这个特性让我有点惊讶,我没想到它会发生。

代码如下:

struct XY {
    int x,y;
    XY(int v) : x(v), y(v) {}
};

bool test1(const XY &pos){
    return pos.x < pos.y;
}
bool test1(int x, int y){
    return x < y;
}
void functest(){
    int val = 5;
    test1(val);
}

所以我可以用整数参数调用一个函数,不管这种重载是否存在,它都会使用 XY 类型的函数,因为它有一个相同类型的构造函数!我不希望这种情况发生,我该怎么做才能防止这种情况发生?

最佳答案

使XY 构造函数显式化:

explicit XY(int v) : x(v), y(v) {}

这将禁止从 intXY 的隐式转换,这是调用单参数 test1 函数时发生的情况。

关于c++ - 如何强制函数参数为同一类型并且不允许使用类型构造函数来匹配给定类型?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/10372803/

相关文章:

c++ - 为 DFT 生成方波

winapi - 将程序集 list 直接加载到应用程序上下文中是否正确?

c++ - 使用数据包套接字在同一网络接口(interface)上发送和接收时无法接收数据包

c++ - 如何选择 Mat 中的某些特定列?

c++ - 双数据类型背包

c# - 解决方案资源管理器中的搜索选项

c++ - boost::asio 和 send() 的使用

c++ - 为什么这段代码不能使用 MS 编译器编译?

asp.net mvc框架,自动发送邮件

xml - 如何在 XML 文件中的同一元素名称中写入多个 Mats?