|
|
详解让人闹心的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;
- }
复制代码
运行结果如下:

下面开始详解这句代码。
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.operator<<("Hello!").operator<<(ednl);
复制代码
这里有同学要说:“cout”是类名啊,不是对象啊,怎么能这么用呢?
其实是可以的,当用类名引用其成员函数时,会产生临时对象,只是这个临时对象咱们看不见。
所以实际上语句“cout<<"Hello!"<<endl;”通过运算符重载机制调用了cout的两次成员函数“operator<<()”,
第一次调用时输入参数为字符串“Hello”,效果是输出字符串“Hello”,
第二次调用时输入参数为ednl,效果是输出换行符。
说到这里,大家就应该明白让人闹心的C++语句 cout<<“Hello“<<endl;是怎么回事了吧!
|
|