如何防止size_t被解释为引用

How to prevent size_t from being interpreted as reference?

本文关键字:解释 引用 何防止 size      更新时间:2023-10-16

我如何改变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;
}

构造函数explicit:

explicit Point(float value) : value(value) {} // no semicolon here

这禁止隐式转换(从size_tfloatPoint),但注意它也使start.distanceTo(3.14)Point p = 3.14;等代码无效。

明确构造函数。把Point(float value)改成explicit Point(float value),问题就解决了。