作為c++程式設計師你不知道這些技巧?這哪能行?趕緊來學學。 以下是我在平時專案開發中常喜歡使用的一些技巧,希望對你有所幫助。
(在恰當時候使用一些技巧能讓你的**變得更加美)
(一)do{}while(false)使用
在寫**的時候有沒這種情況,偽**:
void model()}}
other code; // 必須執行的**
}
有時候可能會遇到這種情況,最後面的other code是必須執行的**,然後上面又很多判斷條件,一直if…if…if…,看著看著就辣眼睛了。
這時候可以考慮使用下do{} while(false); 偽**:
void model()
while(false);
other code; // 必須執行的**
}
while(false)讓我們的**只執行一次,但我們可以通過break讓**跳出該模組,而消除了某些情況下多次if導致的**可讀性差。
(二)union
聯合體大家都有在書上看到吧?對於初學c++的小夥伴可能不了解為啥要用他。雖然不是啥新鮮技巧了,但還是說說吧!
在專案開發中我時常喜歡使用聯合體來作為索引的轉換,如你是名玩家那你所在的伺服器id,跟你的個人id組合起來在全服中就是唯一值,那麼要怎麼拿到這個唯一值呢?
union rolekey
uint64 nvalue;
}// 那麼我們在這裡獲取64位的唯一值
const uint64 getrolekey(uint32 serverid, uint32 guid)
利用聯合體的機制我們很容易的將低32位設定為了伺服器id,高32位設定為了個人id,最終通過聯合體機制獲得了64位唯一值。
(三)結構體初始化
正常情況下可能是這樣的?
struct model
};
那現在是怎麼樣的?不急不急,使用一些小技巧可以讓我們節省**的同時不容易犯錯,往下看。
// 模板類
template class zerostruct
};// 沒錯現在是這樣的
struct model : zerostruct;
通過繼承模板類的方式來達到很方便的初始化,看個人喜好使用。
(四)tuple的使用
沒錯這是元組,學過其他語言的童鞋們應該很羨慕其他語言(如:python),他們有元組,可以支援任意型別的資料型別。 我在這裡提出只是讓不了解的童鞋們知道c++11後,c++也支援了元組,它就是——tuple。
為了簡單理解啥是元組,其實我們可以拿pair來做比較,pair支援兩個引數如:std::pair_pair; 而tople是可很多引數的,具體看如下**。
using testtuple = std::tuple;
void test()
;
for (auto& e : test)
}
通過使用tuple,很多情況下我們可以不使用結構體了。
(五)enum 中加class
如果全域性中使用enum,很可能導致列舉型別的命名衝突,這時加class能很好的防止命名衝突,非常推薦使用。
enum class modetype
;
(六)lambda
對於lambda的使用可以看我之前的文章
c++11 lambda表示式使用場景解析
(七)巨集
前面文章也有對巨集的一些用法如:
c++巨集的黑科技用法《結構體位元組序自動轉換》
先總結這幾點,後續如果有其他好用的技巧我會更新上來,也歡迎童鞋們有好的技巧能分享給我。
想成為程式設計師,這些技能不能少
對於剛開始學習軟體開發的新人來說,必備技能 往往意味著乙個長長的 標有重要度的學習列表,但是過長的列表通常會導致新人不知如何開始學習,壓力倍增。本文嘗試列舉出最重要的幾個技能,也期望通過此列表能給新人乙個比較明確的學習重點和路徑。沒有掌握任何一門程式語言,就不可能成為一名程式設計人員。許多程式設計師...
想成為程式設計師,這些技能不能少
對於剛開始學習軟體開發的新人來說,必備技能 往往意味著乙個長長的 標有重要度的學習列表,但是過長的列表通常會導致新人不知如何開始學習,壓力倍增。本文嘗試列舉出最重要的幾個技能,也期望通過此列表能給新人乙個比較明確的學習重點和路徑。沒有掌握任何一門程式語言,就不可能成為一名程式設計人員。許多程式設計師...
想成為程式設計師,這些技能不能少
對於剛開始學習軟體開發的新人來說,必備技能 往往意味著乙個長長的 標有重要度的學習列表,但是過長的列表通常會導致新人不知如何開始學習,壓力倍增。本文嘗試列舉出最重要的幾個技能,也期望通過此列表能給新人乙個比較明確的學習重點和路徑。沒有掌握任何一門程式語言,就不可能成為一名程式設計人員。許多程式設計師...