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&operator
arr
是一个
X
数组,而不是
int
数组。这就是为什么必须重载
运算符的原因。我什么时候必须重载运算符?当编译器告诉您找不到合适的重载时(您尝试使用它并得到一个编译器错误).try
std::cout wow谢谢!!@raket1111那我为什么不应该重载运算符[]?@Rakete1111
operator@RemyLebeau我很快就把它放在一起,编译成功并按预期运行。我在编辑时考虑了你的建议。@RemyLebeau
operator@Rakete1111我总是在类中作为
朋友操作符
(访问私有/受保护的数据)没有任何问题,但我也经常看到它作为一个独立函数实现。这里有最佳实践吗?@tadman我不知道。如果你在类中定义它,它隐式地
内联
,只能使用ADL找到。如果你在外部定义它,那么就没有了。这真的取决于你的用例,有很多问题我觉得有区别。
std::ostream& operator<<(std::ostream& o, const X& x) {
  o << x._x;
  return o;
}