函式引數中使用const型別的引數

2022-02-28 12:38:52 字數 656 閱讀 5334

作用:在函式的引數中使用const,可以讓編譯器知道在函式呼叫過程中,對於某個引數不會修改引數的資料,從而可以提供給編譯器更多的優化機會。

比如標準函式

char *strcpy(char *dst, const char *src);

這裡,第二個輸入引數使用const char *src,而不是char *src. 這個表示函式strcpy不會修改 src指向的內容。

還有在某些c++類成員函式中,我們會標明乙個成員函式是const,這個表示這個成員函式不會修改這個類物件的任何資料,比如

class complex

return

true;

}給指標x,y標上const屬性後(對於函式引數,陣列和指標實質上是相同的),那麼編譯器就可以知道,這個函式中的迴圈每個不同的迭代(iteration)中的內容都是不相關的,可以並行執行,所以編譯器就可以採用並行指令來處理它們了。

不然, 由於指標z有可能同x,y指向的記憶體(全部或部分重疊),那麼對任何乙個z[i]的修改可能會改變x[.]或y[.]中部分的資料,從而迴圈的不同迭代之間就會有資料依賴關係了;這樣,編譯器就無法採用並行指令來優化上面的**了。

此外,對於常數變數,同樣也要在能夠新增const時就要新增const,這些都可以增加編譯器對**進行優化的機會。

慎用 const 引用引數型別

前兩天寫 時同事碰到乙個c 編譯錯誤,代號為c2664,內容為 不能將const object w64 to object 但明明取的就是一般的object 怎麼會說我們給的引數型別是const object w64,很奇怪。經過細心檢查,原來是函式引數的問題,用的const object 型別,雖...

python函式中使用預設引數的坑

先定義乙個函式,傳入乙個list,新增乙個end再返回 def add end l return l當你正常呼叫時,結果似乎不錯 add end 1,2,3 1,2,3,end add end x y z x y z end 當你使用預設引數呼叫時,一開始結果也是對的 add end end 但是,...

c 中使用成員函式作為函式引數的方法

總結有以下幾個辦法 1.使用類的靜態成員 最簡單的.只是這種辦法與使用普通函式沒有什麼區別 2.模板的方法 1 template class t 2 void call t ptr,void t menfn 3 1 class myclass2 8 9 10 myclass cs 11 call c...