C 函式的引數型別中為什麼要加const

2021-10-23 09:14:27 字數 1151 閱讀 1040

const 是用於對常量的修改,帶有const的引用可以稱之為常量引用。但是在函式中為什麼要新增這個呢,比如void fun(string&)void fun(const string&)到底有什麼區別呢,本文就些問題進行簡單介紹。

給定給以下兩個函式:

void

fun1

(string& s)

void

fun2

(const string& s)

這裡我們進行以下四個呼叫,哪些會報錯?

0: string s =

"hello"

;1: fun1

("hello");

2: fun2

("hello");

3: fun1

(s);

4: fun2

(s);

答題是只有fun1("hello")會報錯,因為fun1(s)fun2("hello")符合定義肯定沒問題,而為什麼fun2(s)不會出錯,就是因為常量引用相容變數引用。這個如何理解,可以看這句:string s = "hello";這句就是典型的將常量賦值給變數,即等號左側的型別是string, 而右側是const string,這就是乙個典型的示例。

在以下兩個函式中,fun3(string&)不會報錯,而fun4(const string&)則會報錯,原因就是常量修改的變數不能修改,如果這裡換成其他任意型別的變數,如fun5(const person&)結果也是一樣。

void

fun3

(string &s)

void

fun4

(const string &s)

對於常量引用的作用,一般對於字串類基本值使用較多,一般對於類型別使用較少。在大部分情況下,都是需要修改的。而當傳入引數限制修改時,就可以使用const

C 類的執行緒函式為什麼要加static修飾

首先看下面這個類 class cmytest void main threadfun lpvoid 為什麼要加static修飾呢!原來非靜態成員函式都會在引數列表中加上乙個this指標為為引數,這樣的話你寫的執行緒函式就不符合呼叫規定了.比如 dword winapi threadfun lpvoi...

C 中 ain函式為什麼要static

假設沒有static關鍵字,那意味著需要用生成乙個例項後才可以呼叫這個 ain方法,而 ain方法是程式入口點,你沒有進入 ain方法,自然無法生成乙個例項,既然沒有例項,那就無法呼叫 ain函式,豈不矛盾?所以 ain函式被設定為static.main 函式在c 裡非常特殊,它是編譯器規定的所有可...

C 中,為什麼在值型別後面加問號

在c 中,宣告乙個值型別或引用型別的變數,無論是否給這個變數賦初值,該變數都有預設值 比如宣告引用型別變數 string a,其等效於string a null,string的預設值為null。比如宣告值型別變數 int a,其等效於int a 0,int的預設值為0。為什麼需要讓值型別可以為nul...