C++中的重载转换运算符

Overloading conversion operator in c++

当运算符函数作为成员函数实现时,最左边的操作数必须是运算符 class 的对象 但在下面的代码中

#include<iostream>
    using namespace std;
    class ffloat {
      private:
        float a;
      public:
        ffloat():a(34.566){}
        operator int () {
          return a=static_cast<int >(a);
        }
     };

     int main() {
       ffloat w;
       int x;
       x=w;
       cout<<x<<endl;
     }

最左边的操作数是可变的,那为什么编译器没有发送错误 提前致谢....

实际上,a=static_cast<int >(a) 意味着 a 应该从 float a 转换为整数,然后 return 将其转换为整数。

一切都有效,你的运营商int应该returnint

operator int() 是一个转换函数,它唯一的操作数是隐式的 'this' 参数。因此 x=w 没有违反规则,因为 x 不是转换的操作数。这部分是为什么写 int(w) 没有丢失的操作数是好的。您所指的规则是关于像 '+ - * /' 这样的运算符,它可以有 2 个操作数。