改善c 程式建議 其他

2021-09-01 08:47:11 字數 1802 閱讀 2623

1、c++編寫死迴圈一般使用:

while(1)

2、關鍵字static有三個明顯的作用

1)在函式體,乙個被宣告為靜態的變數在這一函式被呼叫過程中維持其值不變。

2) 在模組內(但在函式體外),乙個被宣告為靜態的變數可以被模組內所用函式訪問,但不能被模組外其它函式訪問。它是乙個本地的全域性變數。

3) 在模組內,乙個被宣告為靜態的函式只可被這一模組內的其它函式呼叫。那就是,這個函式被限制在宣告它的模組的本地範圍內使用。

3、關鍵字const有什麼含意?

const可以理解為"唯讀";

4、c++中什麼資料分配在棧或堆中,new分配資料是在近堆還是遠堆中?

堆: 程式執行時動態申請,new 和 malloc申請的記憶體就在堆上

5、c語言中的整數自動轉換原則

void foo(void)

這個問題測試你是否懂得c語言中的整數自動轉換原則,我發現有些開發者懂得極少這些東西。不管如何,這無符號整型問題的答案是輸出是 ">6"。原因是當表示式中存在有符號型別和無符號型別時所有的運算元都自動轉換為無符號型別。因此-20變成了乙個非常大的正整數,所以該表示式計算出的結果大於6。這一點對於應當頻繁用到無符號資料型別的嵌入式系統來說是丰常重要的。如果你答錯了這個問題,你也就到了得不到這份工作的邊緣。

6、巨集函式的必要性與缺點

為什麼要使用巨集呢?因為函式的呼叫必須要將程式執行的順序轉移到函式所存放在記憶體中的某個位址,將函式的程式內容執行完後,再返回到轉去執行該函式前的地方。這種轉移操作要求在轉去執行前要儲存現場並記憶執行的位址,轉回後要恢復現場,並按原來儲存位址繼續執行。因此,函式呼叫要有一定的時間和空間方面的開銷,於是將影響其效率。而巨集只是在預處理的地方把**展開,不需要額外的空間和時間方面的開銷,所以呼叫乙個巨集比呼叫乙個函式更有效率。

但是巨集也有很多的不盡人意的地方。

1、.巨集不能訪問物件的私有成員。

2、.巨集的定義很容易產生二意性。

7、內聯函式相對於巨集的優勢

內聯函式和巨集的區別在於,巨集是由預處理器對巨集進行替代,而內聯函式是通過編譯器控制來實現的。而且內聯函式是真正的函式,只是在需要用到的時候,內聯函式像巨集一樣的展開,所以取消了函式的引數壓棧,減少了呼叫的開銷。你可以象呼叫函式一樣來呼叫內聯函式,而不必擔心會產生於處理巨集的一些問題。

我們可以用inline來定義內聯函式,不過,任何在類的說明部分定義的函式都會被自動的認為是內聯函式。

下面我們來介紹一下內聯函式的用法。

內聯函式必須是和函式體申明在一起,才有效。像這樣的申明inline tablefunction(int i)是沒有效果的,編譯器只是把函式作為普通的函式申明,我們必須定義函式體。

inline tablefunction(int i) ;

我們也可以將定義在類的外部的函式定義為內聯函式,比如:

class tableclass;

inline int dec()

int getnum();

}inline int tableclass::getnum()

當然,內聯函式也有一定的侷限性。就是函式中的執行**不能太多了,如果,內聯函式的函式體過大,一般的編譯器會放棄內聯方式,而採用普通的方式呼叫函式。這樣,內聯函式就和普通函式執行效率一樣了。

8、列舉型常量使程式的可讀性增強

#include

using namespace std;

int main ( )

;day today;

today = monday;

if( today == sunday || today == saturday)

else

}

改善c 程式建議 重中之重的類(四)

size medium b 建議55 地方物件切片 b size 1 定義 c 記憶體模型規定,如果出現繼承結構,記憶體分布一定是先基類部分的資料,後派生類部分的資料。在派生類向基類對映的過程中,派生類的物件中基類部分的資料會被強行 切 掉。2 注意 多型的事先必須依靠指向同一類族的指標或是引用。否...

改善C 程式的157個建議(1)

2.使用預設轉型方法 3.區別對待強制轉型與as和is 1 避免裝箱 什麼是裝箱?指將乙個值型別隱式的轉換為object型別。裝箱為什麼會帶來效能損耗?因為它需要完成下面三個步驟 1 會為值型別在託管堆中分配記憶體。除了使用值型別本身所分配的記憶體空間外,記憶體總量還要加上型別物件指標和同步塊索引所...

改善C 程式 的N個建議 6 10

建議6 分清readonly和const的使用方法.首先區分他們的各自特點.readonly 執行時常量.const 編譯期常量 決定了它肯定是靜態的 只能修飾基元型別 string 也是屬於基元型別 和列舉型別.或許有人會問了,執行時常量和編譯期常量有什麼區別呢?那就先看一下 片段 public ...