原创 C++ shared_ptr的實現

自己寫了一個shared_ptr的實現。如有錯漏,還望指摘。 template<class T> class MySharedPtr { private: T* ptr = nullptr; std::atomic

原创 自定義for循環

首先,這裏說的for循環,是指C++中新增的for(a : b)格式的for循環。 最近碰到了這樣的問題,就來記錄一下。如有錯漏,還望指摘。 C++新增的這種for循環,使用來遍歷容器中的每一個元素。但是有時候,我想自定義自己的容

原创 模板與重載

今天編程遇到一個問題,使用重載會簡單不少,但是如果輸入類型不在預設的類型中,又會出現問題。使用模板又比較麻煩。 所以突發奇想,模板和普通函數同時使用的時候會怎麼樣? 比如如下代碼: int type(int){ retur

原创 內聯函數與宏定義函數的異同

面試時被問到了這個問題,當時突然懵了,所以來整理一下。如有疏漏,還望指摘。 (結論在最後,懶得看的同學可以直接翻到總結) 內聯函數與宏定義的函數很相似,都是在運行前,先將一些簡短的函數,直接替換爲實現代碼,以此來省去函數調用時,參

原创 初始化列表,以及構造函數和析構函數的調用順序

新學到了C++裏新的初始化方法,初始化列表。因此來整理一下。若有錯漏,還望指摘。 構造函數 構造函數可分爲普通構造函數和拷貝構造函數。 普通構造函數 構造函數就是在類實例化時,自動調用來生成類的函數。若未定義,則系統自動生成。

原创 new、delete和malloc、free詳解與混用問題

如有錯漏,還望指摘! 以前看到的資料都說,new和delete、new[]和delete[]、malloc和free,必須配套使用,不應該混用。 然而我最近遇到一些相關的問題,因此不得不探究一下,混用了會怎麼樣呢? 其實要想知道能

原创 源代碼到可執行代碼的過程

這一部分一直很好奇,不過一直也沒仔細記。這次記一下。 源代碼 --(預處理、編譯、優化)–> 彙編代碼 --(彙編)–> 目標文件 --(鏈接)–> 可執行文件 預處理 讀取源程序,對其中的僞指令(以#開頭的指令)和特殊符號進行處

原创 Bison%code的使用

最近遇到一個很惱人的問題: 我在Bison的YYSTYPE的定義中使用了unordered_map*,並在開頭的%{ … %}段中include了unordered_map頭文件。 然而當我使用--defines選項生成bison

原创 更改Bison-Flex的輸入源

在我最開始使用Bison-flex時,出於某些原因,涉及到題目這個問題。在此來說明一下該如何操作。 如有錯漏,還望指摘。 首先,《Flex與Bison中文版》中說明了,Bison-Flex一般以FILE*變量yyin作爲指定輸入,

原创 雜注__declspec

今天看到一個一個好玩的東西:__declspec。這是Microsoft提供的一個關鍵詞,配合一些屬性可以對標準c++做一些擴充。(所以只能在Visual Studio上用) 總結一下其中我覺得有意思的。如有錯漏還望指摘~ __d

原创 字符串處理——判斷是否是數字或字母

最近寫的代碼涉及到字符串的判斷,主要是判斷一個字符是否是十進制數字、十六進制數字、大寫字母、小寫字母。學到了一些新知識。 最開始我採用最簡單暴力的方法: char ch; if(ch >= '0' && ch <= '9') /

原创 socket編程——阻塞、非阻塞、同步、異步

我這裏主要是參考了這篇文章。 一開始我很疑惑,同步異步和阻塞非阻塞有什麼區別麼?看了這篇文章感覺有所悟,所以來總結一下。 阻塞與非阻塞 阻塞 所謂阻塞,是指將一個IO操作交給底層之後,底層不執行完畢不返回。也就是程序運行到這裏

原创 設計模式——C++版

開一個新坑……邊學習邊總結。如有錯漏,還望指摘。 什麼是設計模式? 設計模式,可以說是個老生常談的話題了,面試必問,考試必考,敲黑板,送分題。那麼什麼是設計模式呢? 百度一下:軟件設計模式(Design pattern),又稱設計

原创 設計模式(C++)——工廠模式

工廠模式 工廠模式提供了一種創建對象的方式。它將創建的過程隱藏了起來,調用者只負責獲取,不關心創建的細節。 // Shape.h #pragma once // 抽象類 class BaseShape { public:

原创 C++小技巧——將類型typedef成數組

今天學習到一個新的C++小技巧: 將一個類型定義成數組。大概像這樣: typedef struct _s { int a = 0; }s[1]; 這樣在定義s的時候可以分配在棧上,但是又因爲是數組,在傳遞的時候是傳遞指針