《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.pswp.cn/news/382281.shtml
繁體地址,請注明出處:http://hk.pswp.cn/news/382281.shtml
英文地址,請注明出處:http://en.pswp.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] …