《C++ Primer第五版》第一章-------IO机制和注释缩进

        C++ Primer第一章的内容相对来说比较基础,主要是对C++中程序编译的流程、C++中的IO机制,for和while循环的介绍、类的构成和注释方法及缩进方法做了简要的介绍,本次博客主要从C++中的IO机制和注释缩进等方面做一个总结记录,如果在总结过程中有需要补充或者错误的地方,欢迎各位博主指正和交流。

1、C++中的IO机制

        和C语言中使用函数来实现输入输出不同,C++采用标准库文件iostream来实现IO机制(输入输出流机制:随着时间推移,字符顺序生成或消耗),其中库文件iostream又拆分成输入流istream(定义了输入流cin(运算符为>>),本质是istream的一个对象)和输出流ostream(定了标准输出流cout(运算符为<<),标准错误流cerr(警告和错误)和一般消息clog)。

        在实际的编程过程中,可以使用istream输入流对象作为判断条件,其效果是检测流的状态是否有效。当遇到文件结束符(EOF,unix系统中采用ctrl+D生成文件结束符,Windows中采用的是ctrl+Z)或者无效输入时(即定义的变量类型和输入的变量类型不一致)时,istream流状态无效。

注意事项:如果定义赋值的数据类型为char/string类型,那么ctrl+D会被认为是输入了一个字符,因此输入流状态依然有效。如果定义赋值的数据类型为int,则ctrl+D会被认为是无效输入,程序终止。正确的做法是在对应的系统中使用相对应的文件结束符。

        C++在实现IO机制时,采用缓冲区的工作原理,通过缓冲区来保存数据,从而实现读写操作。在数据读写的过程中,读写缓冲区的动作与程序中的动作是无关的,我们可以采用操纵符(如endl)来显示刷新输出缓冲中的数据到输出设备中。默认状态下,读cin会刷新cout;程序非正常终止时也会刷新cout。

***缓冲区小结(参考博客:https://www.cnblogs.com/limera/p/buffer.html)

缓冲区分为:全缓冲(填满缓存之后才能进行IO操作,如磁盘文件的读写),行缓冲(遇到换行符执行IO操作,如键盘输入数据)和不带缓存(如标准出错stderr,为了让错误尽快显示出来)

缓存区的刷新:缓存区满时,执行flush和endl(等价于\n+flush)等操纵符,关闭文件

2.注释及缩进

         在软件开发的过程中,需要对程序代码进行相应的注释。注释的作用是用来概述算法的功能,确定变量的具体用途,解释具体的代码段。注释对于编译器而言会被忽略,但对其他程序员阅读和自己以后的整体有着很大的帮助,因此写好代码注释也是称为一名合格程序员的基本功。

         对于代码注释,应该遵从以下两条原则(自己总结的,如果有更好的经验,欢迎在博客下面留言):1)注释存储关键数据的变量,并说明变量的意义;2)不要去解释代码做了什么,而去解释为什么这么做。

         C++的注释方法有两种:1)采用单行注释以“//”开始,换行符结束;2)界定符注释,即以“/*”开始,以“*/”结束,采用界定符注释时,可以注释多行,注释多行时最好在每行的前面加上“*”,方便显示注释的范围,同时界定符注释不支持嵌套注释

         VS中注释和取消注释的快捷键为:1)注释快捷键:ctrl+K,ctrl+C;2)取消注释:ctrl+K,ctrk+U。

         对于C++而言,格式在很大程度都是比较自由的,但有一点需要主要的是:对于函数而言,花括号必须是形参列表后第一个非空、非注释的字符。

***内容补充1:换行符\n和endl区别?

参考博客:http://www.cnblogs.com/taqikema/p/7743914.html

          换行符的作用在于将输入写入到缓存区中(如行缓存,遇到换行才执行IO操作)或显示实现换行的目的;而endl的作用在于先实现换行操作,而后实现刷新缓存区。一般情况下,不加endl也能够正常输出数据,因为系统在空闲的过程(没有一个合适的界限)中会查看缓存区的内容,如果发现有新的数据,则会进行输出。

但是,不能在任何的情况下都是用endl,因为不停地刷新缓存区,会降低程序的运行效率,因此等根据具体情况具体分析。

***内容补充2:未初始化的变量小结

       类类型变量如果没有指定初值,则按类定义指定的方式或系统默认的方式进行初始化。定义在函数内部的内置类型变量默认是不初始化的,除非有显示的初始化语句。试图使用一个未初始化变量的值是错误的,会产生对应的bug。

****内容补充3:术语中英文对照表

参数(argument)赋值(assignment)程序块(block)缓冲区(buffer)内置类型(built-in type)字符串字面值常量(character string literal)类(class)类类型(class type)注释(comment)条件(condition)花括号(curly brance)数据结构(data structure)编辑-编译-调试(edit-compile-debug)文件结束符(end-of-file)表达式(expression)fot/while/if语句(for/while/if statement)函数(function/body/name)头文件(header)初始化(initialize)库类型(library type)操纵符(manipulator)成员函数(member function)方法(method)命名空间(namespace)形参列表(parameter list)返回类型(return type)源文件(source file)标准错误/输入/库/输出(standard error/input/library/output)未初始化的变量(uninitialized variable)运算符(operator)

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值