昊虹AI笔记网

 找回密码
 立即注册
搜索
查看: 1658|回复: 0
收起左侧

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

[复制链接]

249

主题

252

帖子

976

积分

管理员

Rank: 9Rank: 9Rank: 9

积分
976
昊虹君 发表于 2022-10-18 11:56 | 显示全部楼层 |阅读模式
详解让人闹心的C++语句 cout<<“Hello“<<endl;

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

先上代码和运行结果:
  1. //出处:昊虹AI笔记网(hhai.cc)
  2. //用心记录计算机视觉和AI技术

  3. //博主微信/QQ 2487872782
  4. //QQ群 271891601
  5. //欢迎技术交流与咨询

  6. #include <iostream>

  7. using namespace std;

  8. int main()
  9. {
  10.         cout << "Hello!" << endl;

  11.         return 0;
  12. }
复制代码

运行结果如下:


下面开始详解这句代码。

cout是标准库iostream中的一个类。
cout这个类用于将字符、数字等输出到终端上(比如屏幕)。
cout与符号"<<"配合使用就能将字符、数字等输出到终端上。

那么为cout与符号"<<"配合为啥能产生这样的效果呢?下面就对这个问题进行解释~

我们需要从编译器对“cout<<”的认识角度去说明这个问题。

首先我们看下C++是怎么使用加号“+”实现加法运算的。

C++中的任何运算都是通过函数来实现的,就连加法也不例外。
比如说,“1+2”这个表达式,编译器会自动将这个表达式翻译为:“1.operator+(2);”(注意:数字1也可看成一个对象),这个翻译的过程称为叫“运算符重载”。
翻译为“1.operator+(2);”后,实际上就是去调用了函数operator+(),进而通过函数operator+()实现了加法运算

扩展一下,对于表达式“1+2+3”,等价于下面这句话:
1.operator+(2).operator+(3)


明白C++是怎么使用加号“+”实现加法运算后,
我们回到标题中提到的语句“cout<<"Hello!"<<endl;”,

对于编译器而言,
  1. “cout<<"Hello!"<<endl;”
复制代码

等价于:
  1. cout.operator<<("Hello!").operator<<(ednl);
复制代码

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

所以实际上语句“cout<<"Hello!"<<endl;”通过运算符重载机制调用了cout的两次成员函数“operator<<()”,
第一次调用时输入参数为字符串“Hello”,效果是输出字符串“Hello”,
第二次调用时输入参数为ednl,效果是输出换行符。


说到这里,大家就应该明白让人闹心的C++语句 cout<<“Hello“<<endl;是怎么回事了吧
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

QQ|Archiver|昊虹AI笔记网 ( 蜀ICP备2024076726 )

GMT+8, 2024-9-8 13:03 , Processed in 0.020136 second(s), 19 queries .

Powered by Discuz! X3.4

Copyright © 2001-2021, Tencent Cloud.

快速回复 返回顶部 返回列表