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

old*_*ink 7 c++ iostream function

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

cout << "Hello" << endl;
Run Code Online (Sandbox Code Playgroud)

我在网上的研究告诉我这是一个功能,如果是这样的话,为什么我们可以在不使用"()"的情况下调用它?

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

string ain()
{
   return "  : ?";
}
Run Code Online (Sandbox Code Playgroud)

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

cout << "Whats your name " << ain();
Run Code Online (Sandbox Code Playgroud)

我希望能够将它用作

cout << "Question "  << ain;
Run Code Online (Sandbox Code Playgroud)

就像endl一样,我知道"()"并不多,而且这并没有真正做任何大的事情来节省大量的时间,但我基本上要求这个问题来弄清楚为什么endl可以做到这一点.

krz*_*zaq 11

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

template< class CharT, class Traits >
std::basic_ostream<CharT, Traits>& endl( std::basic_ostream<CharT, Traits>& os );
Run Code Online (Sandbox Code Playgroud)

std::ostreamoperator<<超载调用它在看到它.

您可以自己定义类似的模板:

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

现在,执行

cout << foo << endl;
Run Code Online (Sandbox Code Playgroud)

将打印foo!到标准输出.