c 11筆記 04 const修飾符

2021-10-07 09:36:24 字數 1371 閱讀 7231

簡單明瞭。

如果const出現在星號左邊,表示被指物是常量;如果出現在星號右邊,表示指標自身是常量;如果出現在星號兩邊,表示被指物和指標兩者都是常量。

char greet = 「hello」;

char* p = greet;

//①greet不能變,即不能通過(*p) = 的方式改變

//但仍可通過greet = 的方式改變;指標可指向別處。

const char* p = greet;

char const * p = greet; //同①

char* const p = greet; //②指標不能指向別的,只能greet;greet可改變

const char* const p = greet;//③都不能變

stl迭代器是以指標為根據建立出來的,可以視迭代器為t*指標。

①宣告迭代器為const。與宣告指標為const一樣(宣告乙個t* const指標),表明該迭代器不能指向其他的東西(容器),但是所指向的東西的值是可以改變的。

②宣告迭代器指向東西的值為const,但指向的東西(容器)可以換成其他的,需要const_iterator。

例如:std::vectorvec;

const std::vector::iterator it1 = vec.begin(); //類似於t* const

*it1 = 10; //正確,指向東西的值可以改變

it1++;//錯誤,不能改變指向的東西。

std::vector::const_iterator it2 = vec.begin();//類似於const t*

*it2 = 10;//錯誤,指向的東西的值不能改變

it2++;//正確,指向的東西可以改變

①函式後加const:const是對函式的乙個限定,使其無法修改類內的資料成員。const告訴別人這個函式不會改變物件的狀態。

宣告乙個函式用 const 關鍵字來說明這個函式是乙個唯讀函式(read only method),即不會修改任何的資料成員也就是不會改變該物件的狀態。該類函式的宣告和定義時都要加上 const 關鍵字。

不能呼叫非const函式:如果我們在編寫 const 函式時不小心修改了資料成員,或者呼叫了其他非 const 成員函式(即會修改資料成員的函式),編譯器將會報錯。這無疑讓**更加的健壯。

如 void action(a a) const;

②const修飾函式返回值

用const來修飾返回的指標或引用,保護指標指向的內容或引用的內容不被修改,也常用於運算子過載。歸根究底就是使得函式呼叫表示式不能作為左值。

如:const a& action (a a);

③形式引數加const:防止傳入的實參被改變。

如:void action(const a& a);

const修飾符(C 11標準)

const物件建立之後,就不能改變其值,所以在定義時必須對其初始化。如果利用乙個物件對const物件進行初始化,則它們可以是不是const型別沒有關係。int i 1 const ci i 正確 int j ci 正確 當嘗試改變ci的值時,ci的常量特性才發揮作用 預設情況下,const物件僅在定...

c 11 筆記,c 筆記

find if的使用 bool isthe const string s1 vectora auto aaa find if a.begin a.end isthe aaa為第乙個符合要求的位址。aaa為取到的值。aaa為迭代器 lambda 表示式 auto f cout auto aaa fin...

C 11中的noexcept修飾符

在c 11標準之前,c 在函式宣告中有exception specification 異常宣告 的功能,用來指定函式可能丟擲的異常型別。voidfunc0 throw runtime error voidfunc1 throw voidfunc2 函式func0可能丟擲runtime error型別...