c++ - 运算符 float*() 是做什么的?

标签 c++ class operator-overloading overloading conversion-operator

我一直在查看源代码,试图了解有关 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是无害的,因为每个整数都是复数(但不是,反之亦然)。所以有一个隐式转换 integercomplex是安全的。

关于c++ - 运算符 float*() 是做什么的?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/24261286/

相关文章:

ios - 重载单一平等在Swift中

c++ - MSVS2013 - Neon intrinsics VTBL2 : different result in debug mode vs release mode. 我该如何解决这个问题?

c++ - fuse (用户空间中的文件系统)错误 : expected primary-expression before ‘.’ token

python - 如何在Python/PyQt5中仅获取用户定义的类?

c++ - operator+ 重载有什么问题?

c++访问头文件信息

c# - 适用于 Windows 窗体的 HwndHost - Win32/WinForm 互操作性

c++ - 当内存被其他对象使用时不要删除ptr

php - 警告 : Missing Argument 1

c++ - friend 声明的放置