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...