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

C++ c+中的重载转换运算符+;,c++,operator-overloading,C++,Operator Overloading,当运算符函数作为成员函数实现时,最左边的操作数必须是运算符类的对象 但是在下面的代码中 #include<iostream> using namespace std; class ffloat { private: float a; public: ffloat():a(34.566){} operator int () { return a=static_cast<in

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

#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;
     }
#包括
使用名称空间std;
班轮{
私人:
浮动a;
公众:
fflot():a(34.566){}
运算符int(){
返回a=静态_转换(a);
}
};
int main(){
福洛特w;
int x;
x=w;

实际上,
a=static_cast(a)
意味着
a
应该从float
a
转换为整数,然后它将其作为整数返回


一切都是有效的,运算符
int
应该返回
int
operator int()
是一个转换函数,它唯一的操作数是隐式的'this'参数。因此
x=w
没有违反规则,因为x不是转换的操作数。这就是写
int(w)可以的部分原因
这里没有缺少的操作数。您所指的规则是关于“+-*/”之类的运算符,它可以有两个操作数。

返回a=static\u cast(a)
你明白它的作用吗?如果你把操作符设为常量函数,编译器会防止这个可能的错误。这有什么问题吗…我不知道。这就是为什么我问你是否明白它的作用。它会改变对象中
a
的值。是的…但我写了代码,让操作符重载注意…@neilkrirk@virusai转换运算符的正常语义是,它返回一个转换后的值,但不对对象进行任何更改。例如,
ffloat w;cout我不理解您的解释。让
a
a
的前一个值的整数版本(将四舍五入)然后将其作为返回值返回此
运算符int
将修改对象的状态。这不是转换操作通常的工作方式。嗯,不禁止更改状态(它不是“const”:)这不是我要问的问题根据规则我要问什么“当运算符函数作为成员函数实现时,最左边的操作数必须是运算符类的对象”,但在上面的代码中,对象不是最左边的操作数……然后转换运算符的行为就像一元运算符“如果我错了,请更正我”