详解让人闹心的C++语句 cout<<“Hello“<<endl;

首先说下语句 cout<<“Hello“<<end;的作用,
它的作用是输出字符串Hello和换行符到屏幕,它是通过“C++的运算符重载”原理实现的。

先上代码和运行结果:

//出处:昊虹AI笔记网(hhai.cc)
//用心记录计算机视觉和AI技术

#include <iostream>

using namespace std;

int main()
{
	cout << "Hello!" << endl;

	return 0;
}

 下面开始详解这句代码。

​友情提示:
下面的叙述是存在问题的,
并且有些地方说的还不够清楚,
鉴于此,
博主于2022-10-18日重写了下面的内容,
重写的版本见下面这个链接:

https://www.hhai.cc/thread-81-1-1.html

cout是标准库iostream中的定义好的一个类。

标准库iostream中的这个cout用于将字符、数字等显示到屏幕上。cout与符号"<<"配合使用就能将字符数字等显示到屏幕上。
那么为cout与符号"<<"配合为啥能产生这样的效果呢?下面就对这个问题进行解释~

我们不去探究具体的实现过程,我们只从编译器对“cout<<”的认识角度去说明这个问题!在认识这个问题前我们首先看下我们的C++是怎么使用加号“+”实现加法运算的。

C++中的任何运算都是通过函数来实现的,就连加法也不例外。比如说,“1+2”这个表达式,编译器会自动将这个表达式翻译为:“operator+(1,2);”,这个翻译的过程称为叫“运算符重载”。

翻译为“operator+(1,2);”后,实际上就是去调用了函数operator+(),进而通过函数operator+()实现了加法运算。

我们扩展一下,对于表达式“1+2+3”,等价于下面两句:

operator+(1,2);

operator+(operator+(1,2),3);

另外,C++规定,对象名的前面和后面跟一个操作符等价于“对象.操作符”,如果a是一个对象,那么a++等价于a.++再等价于“a.operator++();”

明白以上三点后,我们回到题目中提到的语句“cout<<"Hello!"<<endl;”,对于编译器而言,

“cout<<"Hello!"<<endl;”等价于下面这句:

cout.<<"Hello!".<<endl;

再等价下面这句话:

cout.operator<<("Hello!").operator<<(ednl);

再等价于下面这两句话:

cout.operator<<("Hello!");

cout.operator<<("endl");

有同学要说“cout”是类名啊,不是对象啊,怎么能这么用呢?其实是可以的,当用类名直引用其成员函数时,会产生临时对象,这个临时对象咱们看不见。

最后,说下“endl”的作用,它用来向缓冲区插入换行符号并刷新。我们可以从下面两个例子的输出结果对比来体会“endl”的作用。

#include <iostream>

using namespace std;

int main( )
{
	cout<<"Hello!"<<endl;

	return 0;
}

运行结果:

#include <iostream>

using namespace std;

int main( )
{
	cout<<"Hello!";

	return 0;
}

运行结果:

最后,再总结一下,为什么语句“cout<<"Hello!"<<endl;“能输出字符串Hello和换行符到屏幕,那是因为用到了C++中的运算符重载的功能,实际在编译和运行时,符号“<<”重载成了相应的函数

  • 33
    点赞
  • 102
    收藏
    觉得还不错? 一键收藏
  • 11
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 11
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值