昊虹君 发表于 2022-10-18 11:56

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

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

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

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

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

#include <iostream>

using namespace std;

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

        return 0;
}
运行结果如下:
http://pic1.hhai.cc/pic1/2022/2022-10/0005/061.png

下面开始详解这句代码。

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;”,
对于编译器而言,
“cout<<"Hello!"<<endl;”
等价于:
cout.operator<<("Hello!").operator<<(ednl);
这里有同学要说:“cout”是类名啊,不是对象啊,怎么能这么用呢?
其实是可以的,当用类名引用其成员函数时,会产生临时对象,只是这个临时对象咱们看不见。

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


说到这里,大家就应该明白让人闹心的C++语句 cout<<“Hello“<<endl;是怎么回事了吧!
页: [1]
查看完整版本: 详解让人闹心的C++语句 cout<<“Hello“<<endl;