学习控制台输入输出

本文是《Hands-On System Programming with C++》读书笔记,重点介绍了C++基于流的IO,包括其优势(如安全性和隐式内存管理)和劣势(如性能问题)。讨论了如何为自定义类型实现输入输出支持,以及调试模式和性能优化技巧,如禁用stdio同步,避免清空缓冲。此外,还讲解了manipulators的使用和创建自定义echo程序与串口回显服务器的例子。
摘要由CSDN通过智能技术生成

《Hands-On System Programming with C++》读书笔记之六

基于流的IO

与C语言的printf()和scanf()不同,C++的输入输出基于流。
std::cout和std::wcout对象都是std::ostream类的实例,他们输出数据到标准C的stdout(即当前标准输出设备,可以是屏幕、打印机或文件),前者支持ASCII,后者支持Unicode。
类似地,std::cin和std::wcin接收来自stdin的数据。

C++基于流的IO之优劣

C++基于流的IO之优势

  • 简洁、安全的支持用户定义类型
  • 防止大量的由空间溢出引起的安全隐患
  • 隐式的提供内存管理
    后面对这些点进行了解释。

C++基于流的IO之劣势

  • 标准C的printf()往往性能更好
  • 格式限定符比的灵活性更好

Beginning with user-defined types

可以通过重载<<和>>操作符实现对自定义类型的输入输出支持。

#include <string.h>
#include <iostream>
#include <fcntl.h>

class custom_errno
{
   

};

std::ostream &operator << (std::ostream &os, const custom_errno &e)
{
   
    return os << strerror(errno);
}

int main()
{
   
    if (open("do_not_exist.txt", O_RDWR) == -1)
        std::cout << custom_errno{
   } << std::endl; // No such file or directory
}

上例中我们创造了一个空类型并重载了<<操作符对它的操作。这里用它来输出errno(一个指示错误的宏)对应的信息。
同样可以重载<<操作符。

#include <iostream>

struct object_t
{
   
    int data1;
    int data2;
};

std::ostream &operator <<(std::ostream &os, const object_t &obj)
{
   
    os << "data1: " << obj.data1 << '\n';
    os << "data2: " << obj.data2 << '\n'
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值