1. 程式人生 > >const 修飾形參與實參

const 修飾形參與實參

最好將const看做引數的一部分,形參和實參保持一致,下面舉個例子來說明形參與實參在const修飾不一致的情況下什麼時候會出錯,什麼時候不會出錯,以及其中的原因。
#include <iostream>
using namespace std;
void string_copy(char *){
     cout<<"string_copy invoked";
}
int main(){

const char * pc_str = "this is a test";
string_copy(pc_str);

}

注意以上程式碼,形參是char *,而實參是const char * 型別,這種寫法是編譯不通過的。 形參是char *,那麼在函式內部就是可以改變它指向的內容的,然而我們傳給它的實參是const char *,意味著實參指向的內容不希望被改變,編譯器會檢測到這種矛盾並報錯。 接下來我們交換一下寫法,實參改為char *,形參改為const char*,這樣有沒有問題呢?
#include <iostream>
using namespace std;
void string_copy(const char *){
     cout<<"string_copy invoked";
}
int main(){

char * pc_str = "this is a test";
string_copy(pc_str);

}
實踐證明是可以編譯通過的,因為形參決定了引數指向的內容不能被改變,我們不管是傳const char*還是傳char * 作為實參都能滿足條件,所以不會報錯,但是會報警告,編譯器不建議這種寫法,這樣不容易理解。 總結:實參不能比形參有更多的限制。