在 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) {}
这将禁止从 int
到 XY
的隐式转换,这是调用单参数 test1
函数时发生的情况。
关于c++ - 如何强制函数参数为同一类型并且不允许使用类型构造函数来匹配给定类型?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/10372803/