作為C 程式設計師怎麼能不會這些技巧?

2021-10-23 08:10:21 字數 1899 閱讀 9371

作為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++巨集的黑科技用法《結構體位元組序自動轉換》

先總結這幾點,後續如果有其他好用的技巧我會更新上來,也歡迎童鞋們有好的技巧能分享給我。

想成為程式設計師,這些技能不能少

對於剛開始學習軟體開發的新人來說,必備技能 往往意味著乙個長長的 標有重要度的學習列表,但是過長的列表通常會導致新人不知如何開始學習,壓力倍增。本文嘗試列舉出最重要的幾個技能,也期望通過此列表能給新人乙個比較明確的學習重點和路徑。沒有掌握任何一門程式語言,就不可能成為一名程式設計人員。許多程式設計師...

想成為程式設計師,這些技能不能少

對於剛開始學習軟體開發的新人來說,必備技能 往往意味著乙個長長的 標有重要度的學習列表,但是過長的列表通常會導致新人不知如何開始學習,壓力倍增。本文嘗試列舉出最重要的幾個技能,也期望通過此列表能給新人乙個比較明確的學習重點和路徑。沒有掌握任何一門程式語言,就不可能成為一名程式設計人員。許多程式設計師...

想成為程式設計師,這些技能不能少

對於剛開始學習軟體開發的新人來說,必備技能 往往意味著乙個長長的 標有重要度的學習列表,但是過長的列表通常會導致新人不知如何開始學習,壓力倍增。本文嘗試列舉出最重要的幾個技能,也期望通過此列表能給新人乙個比較明確的學習重點和路徑。沒有掌握任何一門程式語言,就不可能成為一名程式設計人員。許多程式設計師...