《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)

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/382281.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

19.删除链表的倒数第N个节点 golang

官解 一遍写出来有难度。 [1,2] 2 [2][1,2]1 [1]func removeNthFromEnd(head *ListNode, n int) *ListNode {if n < 0 || head nil {return head}fast : headfor i : 1; i < n && fast ! nil; i{fast fast.Next}if fast nil {return head.Next}slow : headfor…

《C++ Primer 第五版》第二章(1-4小节)------基本内置类型,初始化和赋值及声明和定义,指针和引用,const和constexpr

C Primer第二章的内容主要介绍了变量和基础类型&#xff0c;包括C语言定义的基础内置类型、变量的定义及声明、符合类型如指针及引用的介绍和const及常量表达式constexpr的介绍&#xff0c;本次博客也从这四个方面进行系统的介绍&#xff0c;如果有不足之处&#xff0c;还望其他…

455. 分发饼干 golang

455. 分发饼干 Me func findContentChildren(g []int, s []int) int {if len(s) 0 {return 0}sort.Ints(g)sort.Ints(s)var count, i, j int 0, 0, 0for { if g[i] < s[j] {i, j, count i1, j1, count1} else {j}if i > len(g) || j > len(s) {return count}}re…

《C++ Primer 第五版》第二章(第5小节)——using和typedef,auto和decltype总结

1.using和typedef&#xff08;作用&#xff1a;定义类型别名&#xff09; 1)typedef和using都可以用来定义一个类型别名&#xff0c;二者在类型别名上定义没有区别。只是需要注意的是类型和类型别名的顺序&#xff0c;使用typedef定义类型别名的结构为 typedef 类型 类型别名&a…

204. 计数质数 golang

一次尝试&#xff0c;如何击败100%用户&#xff08;用时&#xff0c;内存&#xff09; func countPrimes(n int) int {if n 499979 {return 41537}if n 11 {return 4}if n 12 {return 5}if n 13 {return 5}if n 14 {return 6}if n 15 {return 6}if n 10 {return 4}if n …

leetcode内存消耗

leetcode内存消耗最是多少 执行用时 :0 ms, 在所有 Go 提交中击败了100.00%的用户 内存消耗 :1.9 MB, 在所有 Go 提交中击败了94.81%的用户测试链接 Test

《C++ Primer 第五版》(第2.5节,第3.1-3.4节) ——采用预处理功能编写头文件,string初始化和字符操作,vector初始化和迭代器

1.采用预处理功能编写头文件 在头文件定义(头文件中的内容是只能被定义一次的实体)过程中&#xff0c;为了防止头文件重复包含的情况&#xff0c;采用预处理器的一个头文件保护符功能,格式为&#xff1a;{ #ifndef 预处理变量(通常大写) #define 预处理变量 #end…

《C++ Primer 第五版》(第3.5-3.6节) ——C++中的内置数组类型,string对象和C风格字符串

1.C中的内置数组类型 C中的数组是内置数据类型&#xff0c;但不是基础数据类型而是构造数据类型&#xff0c;是有限个相同数据、占据着连续物理存储空间的有序集合。而内置数据类型定义的下标运算符可以处理负值运算(只要在数组范围之内)&#xff0c;这和vector及string的下标运…

793. 阶乘函数后K个零 golang

Me(AC 33 / 44 个通过测试用例) func preimageSizeFZF(K int) int {count : 0for i : 0; i < 1000000; i {if trailingZeroes(i) K {count}}fmt.Println(count)//fmt.Println(trailingZeroes(25))return count}func trailingZeroes(n int) int {if n 0 {return 0}return …

小程序radio单选框回显

话不多说&#xff0c;效果图如下&#xff1a; 具体代码如下&#xff1a; <radio-group name"radio" bindchange"getSex"><label><radio value"1" checked"{{xingbie1}}" />男</label><label><radio…

172. 阶乘后的零 golang

官解 一般很难想到这个方向&#xff0c;有点类似数学归纳法&#xff1f; func trailingZeroes(n int) int {if n 0 {return 0}return trailingZeroes(n / 5) n / 5 }

《C++ Primer 第五版》(第4.11节类型转换) ————关于无符号数和有符号数的运算探究

1.关于无符号数和有符号数的运算 关于无符号数和有符号数的运算&#xff0c;在我看来一直是觉得只要有无符号数和有符号数的运算&#xff0c;有符号数就转化为无符号数&#xff0c;但是在《C Primer 第五版》的p142介绍&#xff0c;关于无符号数和有符号数的运算如下规定的&…

《C++ Primer 第五版》(第4.1-4.11节) ——运算符的执行顺序问题,负值坐商取余问题,数值的移位操作

1.运算符的执行顺序问题 在C语言中&#xff0c;没有明确规定大多数二元运算符的求值顺序&#xff0c;这给编译器留下了余地&#xff0c;这种策略是在代码生成效率和程序潜在缺陷之间的权衡。 对于运算符而言&#xff0c;如果运算符的两个对象中&#xff0c;存在表达式指向并修改…

543. 二叉树的直径 golang

文章目录543. 二叉树的直径example正确解法question代码&#xff08;wrong)543. 二叉树的直径 概要: 借鉴了这个题的代码。可是有一个测试用例过不去 https://blog.csdn.net/csdn_kou/article/details/104122067 example 给定一棵二叉树&#xff0c;你需要计算它的直径长度。一…

《C++ Primer 第五版》(第4.11-4.12节)——static_cast,const_cast和reinterpret_cast类型转换, 运算符优先级表

1.static_cast,const_cast和reinterpret_cast类型转换 static_cast:强制的类型转换(不能用于底层的const转换),以前C语言中的强制类型转换都可以使用static_cast来完成。如&#xff1a;int i3; double jstatic_cast<double>(i); const_cast&#xff1a;改变底层const(指针…

《C++ Primer 第五版》(第5.1-5.6节) ——异常处理机制(try语句块,throw表达式和catch异常捕捉处理单元)

1. 异常处理机制 C中使用try,throw和catch三个关键字来实现异常的触发、抛出和处理的功能&#xff0c;具体通用语法形式如下&#xff1a; try{ if(true) normal program-statements&#xff1b;//没有触发异常时候执行的代码 if(false) throw(exception); //出现错误&am…

《C++ Primer 第五版》(第6.1~6.3节) 函数形参和实参传递,可变参数列表和函数返回值

1.函数形参和实参传递问题 函数参数传递有两种&#xff1a;值传递(变量&#xff0c;指针&#xff09;,引用传递(使用别名&#xff09;。 在形参和实参的传递过程中&#xff0c;牵涉到大的类类型对象、容器类型对象或者不支持拷贝操作的对象时&#xff0c;不适合采用值传递&…

461. 汉明距离 golang

Me 异或取出1的个数求取异或后1的个数返回 func hammingDistance(x int, y int) int {x x ^ yvar count 0for x ! 0 {x x & (x - 1)count}return count }

《C++ Primer 第五版》(第6.3~6.7节)——返回指向数组/函数的指针,函数重载,默认形参、inline函数和constexpr函数

1.返回指向数组/函数的指针 顾名思义&#xff0c;就是函数返回值为指向数组/函数的指针。 数组的性质&#xff1a;不能被拷贝&#xff0c;函数也不能返回数组。但可以返回数组指针/引用&#xff0c;声明一个返回数组指针的函数&#xff0c;有四种方式&#xff0c;一种是直接声明…

136. 只出现一次的数字 golang

Me 1. 先排序就好做了 执行用时 :16 ms, 在所有 Go 提交中击败了27.90%的用户 内存消耗 :4.7 MB, 在所有 Go 提交中击败了100.00%的用户func singleNumber(nums []int) int {sort.Ints(nums)for i:0; i < len(nums); i {if i len(nums) - 1 {return nums[i]}if nums[i] …