我正在尝试使 <<
过载当它收到 string
时.我想要如果 string
可以说 Mark
, 它会打印 Dog
.我知道这对你没有意义,但这就是我需要的。
我已经试过了,但它不起作用。
std::ostream& operator << (std::ostream &out, string& a);
std::ostream& operator << (std::ostream &out, string& a){
std::cout << "I love dogs";
return out;
}
int main(){
std::cout<<"I love cats";
return 0;
}
我希望它改变每一个string
无论我在哪里使用函数 std::cout <<
字符串并让它打印出什么 String
也就是说,它总是会打印 Dog
反而。
我的问题是,而不是打印 Dog
, 它继续打印 string
给出。就像它不断打印I love cats
而不是 I love dogs
我已经试过了:
std::ostream& operator << (std::ostream &out, const char* a){
std::cout << "I love dogs";
return out;
}
相反,它给了我段错误。
std::ostream& operator << (std::ostream &out, const char* &a);
而且这个一直在打印I love cats
最佳答案
您必须确保您的自定义 operator<<
将调用默认运算符而不是调用自身。您可以通过在重载运算符 (std::operator<<
) 上使用命名空间限定符来执行此操作。此外,字符串文字是 const char []
而不是 std::string
.
#include <iostream>
std::ostream &operator<<(std::ostream &os, const char *) {
return std::operator<<(os, "I love dogs\n");
}
int main() {
std::cout << "I love cats\n";
}
关于c++ - 使用 cout 运算符重载字符串,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/59346872/