我一直在查看源代码,试图了解有关 C++ 的更多信息,但我遇到了一些看起来令人困惑的代码。我一直无法通过玩弄它来弄清楚它的用途。
谁能解释一下运算符 float *() 的作用及其用法?
class Vector
{
public:
float x,y,z;
Vector() : x(0), y(0), z(0){
}
Vector( float x, float y, float z ) : x(x), y(y), z(z){
}
operator float*(){
return &x;
}
operator const float *(){
return &x;
}
我搜索了 StackOverflow,它看起来像是一个转换运算符,但我仍然不确定它到底做了什么以及它为什么有用。
亲切的问候,
最佳答案
operator <em>type_name</em>
声明一个隐式转换 运算符。换句话说,当您尝试(隐式)将您的类型的对象转换为 float*
时,将调用此函数。 – 例如在作业中:
Vector x(1, 2, 3);
float* f = x;
assert(*f == 1);
不用说,这种特殊的转换非常糟糕,因为它的效果非常不直观,很容易导致无法找到错误。通常应谨慎处理隐式转换,因为它们隐藏了可能令人困惑的语义。但是它们可以很好地与应该互换使用的类型一起使用,并且转换不会造成伤害。
例如,考虑您编写自己的 integer
的情况和 complex
类。来自 integer
的转换至 complex
是无害的,因为每个整数都是复数(但不是,反之亦然)。所以有一个隐式转换 integer
→ complex
是安全的。
关于c++ - 运算符 float*() 是做什么的?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/24261286/