如何防止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)
,问题就解决了。
相关文章:
- 将对象数组的引用传递给函数
- 什么时候在C++中返回常量引用是个好主意
- 请解释"函数1(p1,p2,p3);"的输出
- 我想将一个对T类型的非常量左值引用绑定到一个T类型的临时值
- 何时在引用或唯一指针上使用移动语义
- 如何在c++中使用引用实现类似python的行为
- 隐式重新解释引用时强制转换,没有警告/错误
- 解释通过从函数引用返回数组的语法
- 寻找有关为什么此C++代码在没有引用的情况下不起作用的解释
- 引用变量何时合适,为什么?你能解释一下实际的语法和位置吗?
- 有人可以解释一下通过此代码的值/引用传递的过程
- 通过重新解释强制转换创建无效引用
- 有人能解释一下这些编程术语吗:引用语义,非线性可变状态
- 为什么非常量指针上的常量引用被解释为常量指针
- 有人能解释一下这个C++引用的用法吗
- 需要解释才能理解一个引用的例子
- c++中的引用解释
- C#中引用类型的内存方面的显式强制转换解释
- 指向基的解引用指针的c++ ISO标准解释
- 如何防止size_t被解释为引用