在模板中输入basic_ostream
Input basic_ostream in the template
为什么不使用ttt::focus_pocus()而没有使用()?规则是什么,为什么它在这里起作用?
#include <iostream>
namespace ttt
{
template<class CharT, class Traits>
std::basic_ostream<CharT, Traits>& focus_pocus(std::basic_ostream<CharT, Traits> &os)
{
return os << "focus pocus";
}
};
int main()
{
std::cout << ttt::focus_pocus << std::endl; <--- here
}
<<
运算符被重载以接受与示例 [1] 中的 focus_pocus
函数具有相同签名的函数。这就是为什么您不调用该函数并且不需要 ()
括号的原因。
存在此重载,以允许输出对象,例如std::endl
操作输出流,例如在写入换行符后将其刷新。在您的特殊情况下,您也可以编写一个返回字符串的函数。
[1]: https://en.cppreference.com/w/cpp/io/basic_ostream/operator_ltlt
为什么不使用ttt::focus_pocus()而没有使用()?规则是什么,为什么它在这里起作用?
#include <iostream>
namespace ttt
{
template<class CharT, class Traits>
std::basic_ostream<CharT, Traits>& focus_pocus(std::basic_ostream<CharT, Traits> &os)
{
return os << "focus pocus";
}
};
int main()
{
std::cout << ttt::focus_pocus << std::endl; <--- here
}
<<
运算符被重载以接受与示例 [1] 中的 focus_pocus
函数具有相同签名的函数。这就是为什么您不调用该函数并且不需要 ()
括号的原因。
存在此重载,以允许输出对象,例如std::endl
操作输出流,例如在写入换行符后将其刷新。在您的特殊情况下,您也可以编写一个返回字符串的函数。
[1]: https://en.cppreference.com/w/cpp/io/basic_ostream/operator_ltlt