This question already has answers here:
User-defined Output Stream Manipulators in C

(3个答案)


4年前关闭。




我是 C++ 新手,所以 endl 用于结束该行
cout << "Hello" << endl;

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

我如何声明一个这样的函数,让我们假设我想创建一个函数,每次我要求输入时都会整理控制台
string ain()
{
   return "  : ?";
}

现在不必每次都像这样使用它
cout << "Whats your name " << ain();

我希望能够将它用作
cout << "Question "  << ain;

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

最佳答案

根据 cppreference endl 是一个具有以下原型(prototype)的函数模板:

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

std::ostream 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!到标准输出。

关于c++ - endl 是什么类型的函数?我如何定义像endl这样的东西?,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/40122132/

10-12 14:51