什么是输入和输出流
流提取(<<)(输入)
- 理解:我们可以理解为,输入到io流里面,比如是cin,然后从输入流中读取数据
流插入(<<)(输出)
- 理解:我们可以理解把数据插入到io流里面,比如是cout,然后通过这个流将数据输出到屏幕或其他输出设备。
C++输入流和输出流的优点
类型安全:C++的I/O流机制可以自动识别变量类型(不需要写整形,字节这样的类型),从而提供类型安全。这意味着编译器会在编译时检查类型不匹配错误,而C语言中的
printf
和scanf
系列函数在运行时才检查类型,容易导致运行时错误。可读性:C++的流式I/O操作符
<<
和>>
提供了直观的语法,使得代码易于阅读和编写。与C语言的格式化字符串相比,C++的I/O操作符更易于理解。易于使用:C++的I/O机制使用起来更简单,不需要记住复杂的格式化字符串。对于基本数据类型,直接使用
<<
或>>
即可完成输入输出。扩展性:C++的I/O流库可以很容易地扩展以支持自定义类型的输入输出(自定义类型,使用这个比较方便)。通过运算符重载,可以为自定义类型定义
<<
和>>
运算符,从而实现自定义类型的输入输出。面向对象:C++的I/O流库是基于面向对象设计的,
std::istream
和std::ostream
是从这些类派生的。这种设计使得I/O操作可以与面向对象的程序设计方法无缝集成。本地化支持:C++的I/O流库支持本地化
异常处理:C++的I/O操作可以抛出异常,这使得错误处理更加灵活和强大。而C语言的I/O操作通常只是返回一个错误码。
缓冲管理:C++的I/O流库自动管理缓冲区,开发者不需要手动刷新缓冲区。例如,
std::endl
不仅插入一个换行符,还刷新了输出缓冲区,而C语言中的\n
仅插入换行符。注意事项
- 一般情况下我们可以
using namespace std
,实际项目开发中不建议using namespace std,因为可能导致冲突
。- 这里我们没有包含
<stdio.h>
,也可以使用printf
和scanf
,在包含<iostream>
后间接包含了。VS 系列编译器是这样的,其他编译器可能会报错。
C++输入流和输出流的使用
流提取(<<)(输入)
- 操作:使用
>>
操作符,你可以从std::cin
中读取不同类型的数据,如整数、浮点数、字符、字符串等。- 理解:我们可以理解为,输入到io流里面,比如是cin,然后从输入流中读取数据
- 例子:
#include<iostream>//头文件 int number; std::cin >> number; // 从标准输入读取一个整数
流插入(<<)(输出)
- 操作:使用
<<
操作符,你可以向std::cout
中写入数据,如文本、变量的值等。- 理解:我们可以理解把数据插入到io流里面,比如是cout,然后通过这个流将数据输出到屏幕或其他输出设备。
- 例子:
#include<iostream>//头文件 int number = 42; std::cout << number << std::endl; // 向标准输出写入一个整数和一个换行符
std::endl
std::endl
是一个操纵符,用于向输出流中插入一个换行符,并刷新输出流。它通常与流插入操作符<<
一起使用。
- 操作:当你向
std::cout
使用std::endl
时,它会输出一个换行符,并将输出流缓冲区的内容刷新到标准输出设备。std::cout << "Hello, World!" << std::endl; // 输出文本并换行
关系
std::cin
使用流提取操作符>>
来从输入流中读取数据。std::cout
使用流插入操作符<<
来向输出流中写入数据。std::endl
通常与std::cout
一起使用,用于在输出后添加换行并刷新输出流。
命名空间的展开(
using namespace std
)在C++中,命名空间(namespace)是一种封装全局标识符(如变量名、函数名、类名等)的方式,以防止不同代码库中的同名标识符发生冲突。
std
是C++标准库的命名空间,它包含了标准库中的所有实体。(简单说就是,std::cout
、std::cin
和std::endl
都是std
命名空间中定义的,你不想去域里面访问,直接取消就可以)代码
//代码不展开 #include<iostream>//头文件 int main() {//代码不展开std::cout << "why" << std::endl;//打印出来whyreturn 0; }//代码展开 #include<iostream>//头文件 using namespace std;//取消空间的折叠 int main() {cout << "why" << endl;//打印出来whyreturn 0; }