我目前正在阅读有关重载函数的内容,并且在我的书中遇到了两个示例,但没有解释为什么它们的创建方式不同。
第一个例子像这样重载“==”运算符:
bool operator==(const Passenger &x, const Passenger&y){
//.......implementation details hidden
}
虽然第二个例子像这样重载了“<<”运算符:
ostream& operator << (ostream &out, const Passenger& pass){
//.......implementation details hidden
return out;
}
为什么第二个示例使用了“&”符号而第一个示例没有?为什么我们不能只使用 ostream operator 而不是 ostream& operator?为什么 bool 运算符不使用“&”?
最佳答案
您需要 <<
返回的值运算符作为引用,因此它实际上返回原始的 ostream
对象而不是对象的拷贝。这就是为什么它可以将多个 <<
串起来的原因。一起调用:
std::cout << "Hey"; // Prints "Hey" and returns cout
std::cout << passenger; // Calls custom operator and returns cout
std::cout << "What?"; // Prints "What?" and returns cout
相当于:
std::cout << "Hey" << passenger << "What?";
通过引用返回 bool 值没有多大意义,因为您不希望能够操纵 ==
返回的值运营商。
关于c++ - 为什么这两个重载函数的声明方式不同?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/28615913/