如何防止 size_t 被解释为引用?
How to prevent size_t from being interpreted as reference?
如何更改 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_t
到 float
再到 Point
),但请注意它也会生成 start.distanceTo(3.14)
和 Point p = 3.14;
等代码无效。
使构造函数显式化。将 Point(float value)
更改为 explicit Point(float value)
,问题就会消失。
如何更改 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_t
到 float
再到 Point
),但请注意它也会生成 start.distanceTo(3.14)
和 Point p = 3.14;
等代码无效。
使构造函数显式化。将 Point(float value)
更改为 explicit Point(float value)
,问题就会消失。