C++ 我必须在何时过载操作员<&书信电报;? #包括 使用名称空间std; 结构X{ int_x; X(intx=0):X(X){} }; int main(){ X-arr[5]; 对于(int i=0;i
尽管您的C++ 我必须在何时过载操作员<&书信电报;? #包括 使用名称空间std; 结构X{ int_x; X(intx=0):X(X){} }; int main(){ X-arr[5]; 对于(int i=0;i,c++,object,C++,Object,尽管您的X只是单个int属性的包装,但它的类型与int不同。好消息是,您可以通过添加以下函数来委托给int方法: #include <iostream> using namespace std; struct X{ int _x; X(int x=0):_x(x){} }; int main() { X arr[5]; for (int i = 0;i < 5;i++) { arr[i] = i; } for
X
只是单个int
属性的包装,但它的类型与int
不同。好消息是,您可以通过添加以下函数来委托给int
方法:
#include <iostream>
using namespace std;
struct X{
int _x;
X(int x=0):_x(x){}
};
int main() {
X arr[5];
for (int i = 0;i < 5;i++) {
arr[i] = i;
}
for (int i = 0;i < 5;i++) {
cout << arr[i] <<",";
}
return 0;
}
std::ostream&operatorarr
是一个X
数组,而不是int
数组。这就是为什么必须重载运算符的原因。我什么时候必须重载运算符?当编译器告诉您找不到合适的重载时(您尝试使用它并得到一个编译器错误).trystd::cout wow谢谢!!@raket1111那我为什么不应该重载运算符[]?@Rakete1111operator@RemyLebeau我很快就把它放在一起,编译成功并按预期运行。我在编辑时考虑了你的建议。@RemyLebeauoperator@Rakete1111我总是在类中作为朋友操作符(访问私有/受保护的数据)没有任何问题,但我也经常看到它作为一个独立函数实现。这里有最佳实践吗?@tadman我不知道。如果你在类中定义它,它隐式地内联,只能使用ADL找到。如果你在外部定义它,那么就没有了。这真的取决于你的用例,有很多问题我觉得有区别。
std::ostream& operator<<(std::ostream& o, const X& x) {
o << x._x;
return o;
}