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 个操作数。
当运算符函数作为成员函数实现时,最左边的操作数必须是运算符 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 个操作数。