endl那些不为人知的故事

本文探讨了VisualStudio2022中iostream库中的endl函数的工作原理,并展示了如何创建自定义函数如space,用于输出空格,强调了这些在C++编程中的合法使用方式。
摘要由CSDN通过智能技术生成

注:这篇博文已在我的网站博客里发出(虽然只有一篇)endl那些不为人知的故事 (zhanghaoxvan.github.io)

我一直是用 Visual Studio 2022编辑C/C++代码。众所周知,VS的函数会标上黄色。

有一天,我输入那熟悉的 cout << endl;时,发现那不被注意的 endl标上了黄色。

于是,我点进去了 ostream……

endl源码如下(占据 ostream的1009 ~ 1015行):

	_EXPORT_STD template <class _Elem, class _Traits>
basic_ostream<_Elem, _Traits>& __CLRCALL_OR_CDECL endl(
    basic_ostream<_Elem, _Traits>& _Ostr) { // insert newline and flush stream
    _Ostr.put(_Ostr.widen('\n'));
    _Ostr.flush();
    return _Ostr;
}

我们可以发现, endl是一个函数,传进了一个 ostream &类型的参数,为了连续,返回了一个 ostream &的值。

所以,以下代码是合法的:

	endl(cout); 

相当于:

	cout << endl;

我们是不是也可以制作一个?答案是肯定的。以下是我自己写的 space函数,用来输出一个空格:

	ostream &space(ostream &os) {
    os.put(' ');
    return os;
}

那么,以下代码是合法的:

	#include <iostream>
using namespace std;
ostream &space(ostream &os) {
    os.put(' ');
    return os;
}
int main() {
    cout << "This is a Space:" << space << ":ecapS a si sihT";
    return 0;
}

它输出了以下结果:

	This is a Space: :ecapS a si sihT
D:\Visual Studio 2022\Homework\x64\Debug\Homework.exe (进程 16848)已退出,代码为 0。
按任意键关闭此窗口. . .
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值