1.const變數
a.在全域性作用域裡面定義的const變數,被認為說檔案域的區域性變數,其他檔案不能訪問。
如果需要訪問,則在定義此const變數時,應定義為extern const int i =5;
使用的時候再次在需要使用它的檔案裡面宣告為extern const int i;
b.const變數在定義時必須初始化,而且當const變數的定義和宣告不在同乙個檔案當中的時候,如果不初始化,那麼系統辨認不出來哪乙個是宣告,哪乙個是定義。
2.const引用
a.不能對const引用賦值,但是const引用可以指向非const變數,且const引用的值跟隨非const變數的值改變而改變。
const int ival = 5;
const int &rival = ival;//ok
rival = 6;//error
const double &dval = 5.5;//ok
double &dval1 = 6.6;//error 常量引用可以用常量字面值賦值,但是引用只能指向乙個物件,不能指向乙個常量字面值
int ival1 = 6;
const int &rival1 = ival1;//ok
ival1 = 7;//ok,rival1的值也會變為7
3.指標和const
a.指向常量的指標,const常量的指標,指標本身可以改變,指標指向的值不能改變
const double *ptr;
const double dval = 6.6;
*ptr = 42;//error 不能給常量賦值
ptr = &dval;//ok
(1)不能用*void指標儲存常量的位址,必須用const *void指標儲存才行。
(2)可以把非const常量的位址傳給const指標。
b.const指標,指標本身的值不能改變,但是指標指向的值可以改變。
int ival = 5;
int* const iptr = &ival;
int ival1 = 6;
iptr = & ival1;//error
*iptr = 6;//ok
(1)const指標在定義時必須初始化。
(2)const指標也可指向非const變數。
(3)int const *ptr = int* const ptr;
c.指向常量物件的const指標,指標本身的值和指標指向的值都不能改變
const int ival = 8;
const int* const ptr = &ival;
(1)const int* const ptr = const int const *ptr;
4.const物件的動態陣列,必須初始化const元素
const int* ptr = new const int[100];//error
const int* ptr = new const int[100]();//ok
(1)delte ptr
5.類中的const函式,不能修改類中資料成員的值,但可修改static非const資料成員的值。
(1)從const函式中返回的this指標,是乙個指向const物件的const指標,所以,本身的值和其所指向的值都不能改變。
(2)在類設計時,需要注意const成員函式和非const成員函式的過載。
(3)建構函式不能宣告為const,初始化const物件時,將呼叫普通的建構函式。
(4)const資料成員用預設建構函式的初始化列表來初始化。
(5)類的static const資料成員在類定義體中初始化。
6.const形參,在函式內不能修改形參的值
(1)當const形參為引用或指標的時候,
void fun(int&);
void fun(const int&);
會被認為是函式的過載,但如果引數不是引用或指標,這樣定義會報錯。
void fun(int);
void fun(const int);//error
但是,這樣定義不會報錯,會引起呼叫歧義。
void fun(int);
void fun(const int&);
int i = 2;
const int k = 5;
fun(i);
fun(k);
系統會不知道應該呼叫哪個fun函式
7.容器的唯讀迭代器,迭代器本身可以改變,但是迭代器指向的值不能改變。
C 面試常見題目2 const 與 static
const的最初動機是取代預處理器 defines來進行值替代,它可以被用於指標,函式變數,返回型別,類物件以及成員函式。const物件預設為檔案的區域性變數,要使其可以在其他檔案被訪問,需要顯示指定為extern。對於指標來說,可以指定指標本身為const,也可以指定指標所指向的資料為const,...
c 基礎 const 修改
int main const double minvalue 9.6 定義常量double const double ptr minvalue 將minvlaue位址賦予ptr cout ptr 1.常量在程式中任何改變這個值的企圖都將導致編譯錯誤因此它被稱為是唯讀的read only 理論是無法修...
c 基礎 引用 const
一些c 對於c語言的加強 1 int fun 在c語言中表示返回值int型的函式,括號裡的引數是任意的 但是在c 中也表示int 型返回值的函式,但是括號裡是沒有引數的相當於int fun void 也就是說在c 中他強調的是型別,所有程式的所有元素都必須指明型別 2 c 中的表示式的返回值是變數本...