C++中const的用法
一、修飾區域性變數:
const int n=5;
int const n=5;
這兩種寫法是一樣的,都是表示變數n的值不能被改變了。
需要注意的是,用const修飾變數時,一定要給變數初始化,否則之後就不能再進行賦值了。
const修飾常量靜態字串:
const char* str="fdsafdsa";
如果沒有const的修飾,我們可能會在後面有意無意地寫str[4]=’x’這樣的語句,這樣會導致對只讀記憶體區域的賦值,然後程式會立刻異常終止。
有了const,這個錯誤就能在程式被編譯的時候就立即檢查出來,這就是const的好處。讓邏輯錯誤在編譯期被發現。
二、修飾全域性變數:
全域性變數的作用域是整個檔案,我們應該儘量避免使用全域性變數,因為一旦有一個函式改變了全域性變數的值,它也會影響到其他引用這個變數的函式,導致出了bug後很難發現。
如果一定要用全域性變數,我們應該儘量的使用const修飾符進行修飾,這樣防止不必要的人為修改,使用的方法與區域性變數是相同的。
三、常量指標與指標常量:
1)、常量指標:
常量指標是指標指向的內容是常量,可以有一下兩種定義方式:
const int * n;
int const * n;
注意:
①、常量指標說的是不能通過這個指標改變變數的值,但是還是可以通過其他的引用來改變變數的值的。
int a=5;
const int* n=&a;
a=6;
②、常量指標可以更改指向,即常量指標可以指向其他的地址。
int a[]={1,2};
int b=6;
const int* p=a;
p++; //A
p=&b; //B
A、B兩行程式碼都是可行的。
1)、指標常量:
指標常量是指指標本身是個常量,不能再指向其他的地址,寫法如下:
int *const n;
指標常量指向的地址不能改變,但是地址中儲存的數值是可以改變的 。
int a[]={1,2,3};
int* const p=a; //p++; ==>不可行,方向不能改變
a[0]=5; //p所指元素變為5
如果我們將星號讀作‘指標’,將const讀作‘常量’的話,內容正好符合。
const int*p; int const * p;是常量指標。 =====>所指元素不能改變
int* const p;是指標常量。 =====>指向不能改變
指向常量的常指標:
指標指向的位置不能改變,並且也不能通過這個指標改變變數的值,
但是依然可以通過其他的普通指標改變變數的值。
const int* const p;
四、修飾函式的引數:
1、防止修改指標指向的內容:
void StringCopy(char *strDestination, const char *strSource);
其中 strSource 是輸入引數,strDestination 是輸出引數。給 strSource 加上 const 修飾後,如果函式體內的語句試圖改動 strSource 的內容,編譯器將指出錯誤。
2、防止修改指標指向的地址:
void swap ( int * const p1 , int * const p2 )
指標p1和指標p2指向的地址都不能修改。
3、以上兩種的結合。
五、修飾函式的返回值:
如果給以“指標傳遞”方式的函式返回值加 const 修飾,那麼函式返回值(即指標)的內容不能被修改,該返回值只能被賦給加const 修飾的同型別指標。
例如函式:
const char * GetString(void);
如下語句將出現編譯錯誤:
char *str = GetString();
正確的用法是:
const char *str = GetString();
六、修飾函式:
宣告一個成員函式的時候用const關鍵字,是用來說明這個函式是 "只讀(read-only)"函式,也就是說明這個函式不會修改任何資料成員(object)。
為了宣告一個const成員函式, 把const關鍵字放在函式括號的後面。宣告和定義的時候都應該加上const關鍵字。
注意:
函式後的const表示這個函式不會修改所處class的member variable(成員變數)。
【error】non-member function cannot have cv-qualifier
===> 當前的function是non-member function,並不屬於任何class,因此會報錯。
錯誤程式碼:
#include<iostream>
using namespace std;
void print(int arr[]) const
{
//arr[0]=3;
cout<<*arr;
}
int main()
{
int a[]={1,2,3};
print(a);
return 0;
}
錯誤型別:
參考:https://blog.csdn.net/xingjiarong/article/details/47282255
相關文章
- C++中const的簡單用法C++
- C++中const用法總結C++
- C/C++——const用法完整總結C++
- C/C++中的constC++
- C++中const的妙用C++
- c++中::的用法C++
- c++基礎知識(八)C/C++中修飾符const、extern、static、volatile的用法C++
- C++ 中的 const 物件與 const 成員函式C++物件函式
- C++中的 const 關鍵字C++
- C++中const小結C++
- C/C++中Static和Const的作用C++
- C++中& 的基本用法C++
- C++ 中特殊的用法C++
- const_cast的用法AST
- C++ const int * ; int * constC++
- C++中clock用法C++
- Const 用法總結
- C++中const與指標、引用的總結C++指標
- C++中函式呼叫的用法C++函式
- c++中stack、queue、vector的用法C++
- C++ 中dynamic_cast<>的用法C++AST
- c++const的各種用法C++
- C++ const常量的理解C++
- C/C++const用法C++
- C++中static_cast, dynamic_cast, const_cast用法/使用情況及區別解析C++AST
- C++ 頂層const底層constC++
- C++中string、char *、char[]、const char*的轉換C++
- C++中的static成員、static const成員和const成員的初始化C++
- C++中巨集定義#define的用法C++
- C++ RTTI中dynamic_cast的用法C++AST
- c++中&符號的幾種用法C++符號
- C#中const 和 readonly 修飾符的用法詳解C#
- C++基礎 constC++
- C++ const 總結C++
- C++中函式後面加const修飾C++函式
- C++中push_back()函式的用法C++函式
- 【C/C++】1.函式傳入指標加const的作用及用法區別C++函式指標
- 關於C/C++ const變數 const指標 以及C++ 引用變數的解析C++變數指標