C++输入输出
创始人
2025-05-29 08:43:07

一、Hello World!

学习了C语言之后,我们可以编写代码向这个世界打招呼。

#include 
int main()
{printf("Hello World!\n");return 0;
}

新生婴儿会以自己独特的方式向这个崭新的世界打招呼,C++刚出来后,也算是一个新事物,那C++是否也应该向这个美好的世界来声问候呢?

我们来看下C++是如何来实现问候的。

#include
using namespace std;
int main()
{cout << "Hello world!" << endl;return 0;
}

二、C++的输入输出相关解释

【1】使用cout标准输出(控制台)cin标准输入(键盘)时,必须包含头文件以及按命名空间使用方法使用std

Note:

①cout的功能和printf()的功能类似,cin的功能和scanf()的功能类似,但二者的书写格式却不相同。cout需要借助流插入运算符(<<),cin需要借助流提取运算符(>>)

②cout和cin是全局的流对象,endl是特殊的C++符号,表示换行输出,它们都包含在包含头文件中。

③我们不仅要包含头文件,还要展开std标准命名空间

有些同学可能会有疑问,包含头文件不就好了,为什么还需要std命名空间呢?

这是因为头文件里面包含有已经定义好的全局变量、函数名和类名,若工程内仅仅包含头文件,此时全局变量、函数名和类名数目不多,不易出现命名冲突的问题。但是如果很不幸引入了多个C++标准库的头文件和自己编写的头文件,此时这些头文件里的全局变量、函数名和类名非常多,很容易造成命名冲突的现象。这时编译器该匹配哪个呢?只好取决于哪个库文件先被引用到文件中,并且把另外一个完全屏蔽掉。这显然不是一个好的方法。在标准库的产生过程中,这个问题被提了出来。为了解决上面这个问题,C++引入了命名空间的概念,对于C++的标准库而言,其对应的命名空间为std,标准库的组件都在命名空间std中实现,在由用户手动引入到程序中。

④早期标准库将所有功能在全局域中实现,声明在.h后缀的头文件中,使用时只需包含对应头文件即可,后来将其实现在std命名空间下,为了和C头文件区分,也为了正确使用命名空间,规定C++头文件不带.h;旧编译器(vc 6.0)中还支持格式,后续编译器已不支持,因此推荐使用+std的方式。

// 过时写法,当时还未引入命名空间的概念,现在很多编译器已经不支持了
#include 
// 正确写法
#include
using namespace std;

【2】使用C++输入输出更方便,不需要像printf()、scanf()输入输出时那样,需要手动控制格式。C++的输入输出可以自动识别变量类型。

#include
using namespace std;int main()
{const char* str = "hello bit";cout << str << endl;  // 自动识别变量类型int i = 1;double d = 1.11;cout << i << d << endl;  // 自动识别变量类型// 小数点有多少位,cout就输出多少位cin >> i >> d;  // 不需要像C语言一样使用取地址操作符&cout << i << d << endl;return 0;
}

Note:

cin、cout与printf()、scanf()各有所长,cin、cout虽然可以自动识别类型,但是printf()、scanf()在某些场景下使用起来却比cin、cout更方便。

#include
using namespace std;struct Student
{char name[20];int age;//...
};
int main()
{struct Student s = { "张三",18 };// CPPcout << "姓名:" << s.name << endl;cout << "年龄:" << s.age << endl << endl; // CPP的cout不方便,一项一项写很麻烦// Cprintf("姓名:%s\n年龄:%d\n\n", s.name, s.age);  //写结构体时,C语言的printf更方便,仅一行代码搞定return 0;
}

三、std命名空间的使用惯例

std是C++标准库的命名空间,如何展开std使用更合理呢?

我们经常看到一下三种写法:

写法1:使用using namespace 命名空间名称引入

#include 
using namespace std;int main()
{cout << "hello world!" << endl;return 0;
}

命名空间全部展开,用起来虽然极其方便,但是隔离彻底失效了。这种方式建议大家慎用。

写法2:使用using将命名空间中成员引入

#include 
using std::cout;
using std::endl;int main()
{cout << "hello world" << endl;return 0;
}

该方式可以用于展开std命名空间中常用的成员,还保有较好的隔离效果。

写法3:加命名空间名称及作用域限定符

#include int main()
{std::cout << "hello world" << std::endl;return 0;
}

该方式能够做到最好的命名隔离,但是使用不方便,每次都需要指定域。

Note:

①在日常练习中,建议直接using namespace std即可,这样就很方便。

②using namespace std展开,标准库就全部暴露出来了,如果我们定义跟库重名的类型/对象/函数,就存在冲突问题。虽然这个问题在日常练习中很少出现,但是代码较多、规模大的项目开发中就很容易出现冲突问题。所以建议在项目开发中,使用std::cout这样使用指定命名空间或者using std::cout这样展开常用的库对象/类型等方式。

相关内容

热门资讯

水井坊:澄清“某酒企拟收购”传... (来源:科创100ETF基金)水井坊(600779)公告,公司董事会及全体董事就市场传闻进行澄清说明...
基因疗法公司芳拓生物港股递表,... 12月23日,Frontera Therapeutics(中文名称:芳拓生物)递表港交所,瑞银集团、...
甘肃税务“一号通” 统一接听减... 中新网兰州12月25日电 (王牧雨)记住一个号码,办妥所有税务咨询。自2025年1月1日起,甘肃省纳...
“守望—2025”中老缅泰四国... 12月25日,中老缅泰湄公河联合巡逻执法四国有关执法部门在澜沧江西双版纳景哈水域开展“守望—2025...
北京陶然亭冰雪嘉年华将启幕 3... 中新网北京12月25日电(记者 徐婧)第十六届陶然亭冰雪嘉年华将于26日启幕。3.8万平方米的超大雪...