endl 是什么类型的函数?我如何定义类似 endl 的东西?

What type of a function is endl? How do I define something like endl?

我是 C++ 新手,所以 endl 用于结束行,如

cout << "Hello" << endl;

我在网络上的研究告诉我这是一个函数,如果是的话,为什么我们可以在不使用“();”的情况下调用它

我该如何声明这样的函数,让我们假设我想创建一个函数,每次我要求输入时都会整理控制台

string ain()
{
   return "  : ?";
}

现在不必像这样每次都使用它

cout << "Whats your name " << ain();

我希望能够将其用作

cout << "Question "  << ain;

就像 endl 一样,我知道“()”并不多,这并不能真正节省大量时间,但我问这个问题基本上是为了弄清楚为什么 endl 可以做到这一点.

根据 cppreference endl 是具有以下原型的函数模板:

template< class CharT, class Traits >
std::basic_ostream<CharT, Traits>& endl( std::basic_ostream<CharT, Traits>& os );

std::ostream's operator<<重载看到就调用

你可以自己定义一个类似的模板:

template< class CharT, class Traits >
std::basic_ostream<CharT, Traits>& foo( std::basic_ostream<CharT, Traits>& os )
{
    return os << "foo!";
}

现在,正在执行

cout << foo << endl;

将打印 foo! 到标准输出。

std::ostream 有成员函数重载

std::ostream& operator<<(std::ostream& (*func)(std::ostream&));

这意味着您可以使用

std::cout << ain;

如果 ain 声明为:

std::ostream& ain(std::ostream& out);

它的实现类似于:

std::ostream& ain(std::ostream& out)
{
   return (out << "  : ?");
}