这是代码
#include<iostream>
using namespace std;
main()
{
cout<<"Hellow World"<<endl;
cout.operator<<("Hellow World");
cout.operator<<(endl);
}
Run Code Online (Sandbox Code Playgroud)
我知道这cout<<"Hellow World"<<endl;被解释为
cout.operator<<("Hellow World");
但是这段代码产生了以下结果
Hellow World
0x8048830
如果我使用operator<<(cout,"Hellow World");工作正常cout.operator<<("Hellow World");和
之间的区别 operator<<(cout,"Hellow World");
cout.operator<<("Hellow World");和 之间有什么区别operator<<(cout, "Hellow World");
当你写作时,cout.operator<<("Hellow World");你正在调用operator<<方法并传递一个const char *.因为这个方法没有重载以获取a const char *,但是重载以获取a const void *,这是你调用和获取的0x8048830那个(这是'H'你的字符串中的字符的地址).
当你写的时候,operator<<(cout, "Hellow World")你正在调用一个自由函数operator<<,它在左侧和const char *右侧都有一个输出流.碰巧存在这样的功能,它有以下声明(简化):
std::ostream& operator<<(std::ostream& os, const char *s);
Run Code Online (Sandbox Code Playgroud)
因此,您将打印出一系列字符,这些字符始于s,并在'\0'遇到的第一个字符结束时(所以你得到Hellow, world).
最后,当你写的std::cout << "Hello, world" << std::endl;,因为你是传递一个const char *到operator<<,自由的功能,是一个完美的搭配,选择了该方法operator<<.
| 归档时间: |
|
| 查看次数: |
439 次 |
| 最近记录: |