【发布时间】:2016-06-26 15:59:03
【问题描述】:
如何更改distanceTo(..) 的签名以使编译器在以std::size_t 作为参数的调用时发出警告或错误?
class Point {
private:
float value;
public:
Point(float value) : value(value){};
float distanceTo(const Point &point) { return point.value - value; }
};
int main() {
std::size_t index = 1;
Point start(1);
Point end(4);
float dist = start.distanceTo(index); // compiles, but should not!
std::cout << dist;
return 0;
}
【问题讨论】:
-
问题是:“如何防止隐式类型转换?” (你应该调整标题)
-
是的,
Point不是指针。 -
用户 LogicStuff 和 cpluplusrat 发布时间仅在瞬间不同。 LogicStuff 之后添加了解释和链接。
-
-
@VisorZ
point是否通过值或引用传递在这里并不重要。转换语义是相同的。请注意,传递size_t并不会使&point等于它。构造函数接受它,然后临时对象绑定到 const 引用。
标签: c++ class constructor implicit-conversion