如何使用模板对const使用运算符重载



我正试图重载<lt;操作员只是为了理解目的。我很成功,但我在const数据类型和对象方面遇到了问题。编译器给了我以下内容:

使用重载运算符'<lt;'不明确(操作数类型为"std::__1::ostream"(也称为"basic_stream"(和"const-char"(

我在MAC和c++17上使用带有gcc的Clion。有人能帮我理解上面的错误意味着什么以及如何修复它吗?代码如下。谢谢

template <typename T>
std::ostream& operator<<(std::ostream& ost,  const T data) {
printf("I am very happy");
return ost;
}
int main() {
const char s = 10;
std::cout << s << std::endl;
}

正如上面的注释所提到的,您不能重载流输出的主要类型。它已在标准库中定义。因此,为了打印您的overlaod,您必须发明一些不属于主要类型的用户类型,并流式输出用户类型。这将直接导致你的超负荷。

#include <iostream>
template <typename T>
std::ostream& operator<<(std::ostream& ost,  const T data) {
printf("I am very happy");
return ost;
}
int main() {
struct mytype{  };
mytype s;
std::cout << s << std::endl;
}

此代码将打印您的字符串"我很高兴"。要快乐。

最新更新