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

时间:2016-10-19 04:27:23

标签: c++ function iostream

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

cout << "Hello" << endl;

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

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

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

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

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

我希望能够将其用作

cout << "Question "  << ain;

就像endl一样,我知道&#34;()&#34;并不多,这对于节省大量时间并没有什么大的作用,但我基本上都在问这个问题,弄清楚为什么endl可以做到这一点。

2 个答案:

答案 0 :(得分:10)

根据cppreference endl是一个函数模板,其中包含以下原型:

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

std::ostreamoperator<<超载后会看到它。

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

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

现在,执行

cout << foo << endl;

foo!打印到标准输出。

答案 1 :(得分:4)

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 << "  : ?");
}