我是C ++的新手,所以endl用于结束行
cout << "Hello" << endl;
我在网上的研究告诉我它是一个功能,如果是这样,为什么我们可以在不使用&#34;()的情况下调用它;&#34;
如何声明这样的函数,让我们假设我想创建一个函数,只要我每次请求输入就整理控制台
string ain()
{
return " : ?";
}
现在不必每次都像这样使用
cout << "Whats your name " << ain();
我希望能够将其用作
cout << "Question " << ain;
就像endl一样,我知道&#34;()&#34;并不多,这对于节省大量时间并没有什么大的作用,但我基本上都在问这个问题,弄清楚为什么endl可以做到这一点。
答案 0 :(得分:10)
根据cppreference endl
是一个函数模板,其中包含以下原型:
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!打印到标准输出。
答案 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 << " : ?");
}