const可以用來聲明常量也就是說他的值不能被修改;
const成員必須在定義的時候同時初始化,不能進行賦值
如 const int a;a的值不能修改,不能給它賦值,如何才能讓它一開始就擁有一個值?
1、在聲明的時候對他進行初始化
const int a=1;
2、在函數中聲明的形參,在函數被調用時會得到實參的值。
但是如果在類中呢?
1 class Demo 2 { 3 const int ci; 4 public: 5 void get_ci() 6 { 7 return ci; 8 } 9 };
當直接用這個類定義一個對象時,會出錯,提示沒有初始化const成員變量值 且提示ci是一個只讀的變量
const用於類中成員變量時,將類成員變為只讀屬性(只讀:不能出現在“=”的左邊,但在類中仍可以用一個指針來修改其值。) 所以不可以直接在類的構造函數中初始化const 的成員。
const成員變量只可以初始化列表中初始化
代碼:
1 #include<iostream> 2 using namespace std; 3 class Demo 4 { 5 private: 6 const int ci; 7 public: 8 Demo() :ci(10) 9 { 10 11 } 12 int getci() 13 { 14 return ci; 15 } 16 int setci(int i) 17 { 18 int* mi =(int *) &ci; 19 *mi = i; 20 return ci; 21 } 22 }; 23 int main() 24 { 25 Demo d; 26 cout << "ci=" << d.getci(); 27 28 d.setci(90); 29 cout << "ci=" << d.getci(); 30 31 getchar(); 32 return 0; 33 }
初始化列表是先於構造函數的函數體執行,
並且成員的初始化列表與成員的聲明順序相同的
C語言中的const其實只是只讀變量可以用指針間接改變其值
const修飾的局部變量在棧上分配內存空間
const修飾的全局變量在只讀存儲區分配內儲存空間
1 #include <stdio.h> 2 3 4 int main(void) 5 { 6 const int a=0; 7 int *p= &a; 8 *p=5; 9 printf("*p=%d\n",*p);//5 10 printf("a=%d \n",a);//5 11 printf("&a=%p p=%p",&a,p);//相同 12 return 0; 13 }
