如何强制函数参数为同一类型,不允许使用类型构造函数匹配给定的类型?

Roo*_*kie 3 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);
}
Run Code Online (Sandbox Code Playgroud)

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

jua*_*nza 6

使XY构造函数显式:

explicit XY(int v) : x(v), y(v) {}
Run Code Online (Sandbox Code Playgroud)

这将不允许隐式转换intXY,这是当你调用单参数发生了什么test1功能.