国产 无码 综合区,色欲AV无码国产永久播放,无码天堂亚洲国产AV,国产日韩欧美女同一区二区

C++技能系列 ( 2 ) - const的幾種使用【詳解】

這篇具有很好參考價值的文章主要介紹了C++技能系列 ( 2 ) - const的幾種使用【詳解】。希望對大家有所幫助。如果存在錯誤或未考慮完全的地方,請大家不吝賜教,您也可以點擊"舉報違法"按鈕提交疑問。

系列文章目錄

C++高性能優(yōu)化編程系列
深入理解軟件架構設計系列
高級C++并發(fā)線程編程
C++技能系列

期待你的關注哦?。?!
C++技能系列 ( 2 ) - const的幾種使用【詳解】

生活就是上帝發(fā)給你的一張手牌,無論多爛,你都得拿著。
Life is god give you a hand, no matter how bad, you have to take.

一、聲明帶const

1、const int a

(1)表示常量a,不能改變a的值

//不能改變p的值
const char p = 'f';

2、const int &a

(1)表示常量引用,a代表的內容不能修改

int i = 100;
const int &a = i; //表示a所代表的內容不能被修改
const int &b = 156;  //可以,字面值初始化常量引用
int &c = 156; //錯誤
b = 157; //錯誤,b看成常量,值不能修改

3、const char *p & char const *p

(1)'char const *p;'等價于'const char *p;'
(2)表示常量指針(p所指向的內容不能通過p來修改):

char str[] = "I Love China";
char *p;
p = str;
*p = 'Y';
p++; //p可以指向不同的位置,只要這些位置的內存歸我們管即可

如果將p的定義修改為:

const char *p; //表示常量指針(p所指向的內容不能通過p來修改)
*p = 'Y'; //錯誤

當然,通過str修改內容則沒有問題:

str[0] = 'Y';

4、char * const p

(1)表示指針常量(p不可以指向其他內容):

看如下范例:

char str[] = "I Love China";
char * const p = str;  //定義的時候必須初始化
p++;   //這里不可以,p指向一個內容后,不可以指向其他內容(p不可以指向不同目標)
*p = 'Y';  //但可以修改指向的目標的內容

5、const char * const p & char const * const p

(1)'const char * const p;'等價于'char const * const p;'
(2)表示p的指向不能改變,p指向的內容也不能通過p來改變。

二、函數(shù)形參帶const

1、函數(shù)形參帶const的 - 使用

struct student {int num};
void fs(student &stu){
	stu.num = 1010;
}
student abc;
abc.num = 100;
fs(abc);
std::cout << abc.num << std::endl; //1010

上面這段代碼,可以注意到,在fs()函數(shù)中可以修改stu里的num成員,修改后,該值會被帶回到主調函數(shù)中,也就是說,fs()函數(shù)中對形參stu的修改實際就是對實參abc的修改,因為這里形參采用的是引用類型。

如果不希望在函數(shù)fs中修改形參stu里的值,建議形參最好使用常量引用的習慣。

void fs(const student &stu){
	stu.num = 1010;  //這句就錯誤了,不能修改stu中的內容
}

再繼續(xù)看范例:

void fs(const int i){ //實參可以是正常的int,形參可以使用const int接,這都沒問題
	i = 100;   //這也不行,不能給常量賦值
}

2、函數(shù)形參帶const的 - 好處

(1)可以防止無意中修改了形參值導致實參值被無意中修改掉。
(2)實參類型可以更加靈活。

struct student {int num};
void fs(student &stu){
	
}
student abc;
abc.num = 100;
const student& def = abc;
fs(def);//錯誤,因為def類型是const&,而函數(shù)fs的形參不帶const
std::cout << abc.num << std::endl; //1010

如果改成:

void fs(const student &stu){
	
}

可以看到const student &stu這種類型的形參可以接受的實參類型更多樣化,可以接收普通的引用作為實參,也可以接收常量引用作為實參。

再繼續(xù)看看如下范例:

void func2(int &a);//定義函數(shù)func2()
func2(156);//不可以,必須傳遞進去一個變量

修改后:

void func2(const int &a);//定義函數(shù)func2()
func2(156);//可以,可以船進去一個常量

三、成員函數(shù)末尾帶const

成員函數(shù)末尾加const起什么作用呢?表示該成員函數(shù)不會修改該對象里面的任何成員變量的值。

這種在末尾加了一個const的成員函數(shù)也稱常量成員函數(shù)。

class Persion{
public:
	void Get() const{
		a_ += 10;   //錯誤,常量成員函數(shù)不可以修改成員變量的值
	}
	void Add(int x){
		a_ = a_ - x ;
	}
private:
	int a_;
}

從上面的代碼看,如果在Get的成員函數(shù)中修改成員變量a_的值,是不被允許的。

看看如下范例:

//	定義const對象,這種對象有限制
const Persion per;
//	不可以,Add成員函數(shù)是非const的,只能被非const的對象調用
per.Add(14);
// 可以因為Get()的成員函數(shù)是const
per.Get();
Persion per2;
//Get是const成員函數(shù),則不管是cosnt對象還是非const對象都可以調用const員函數(shù)
//而非const得成員函數(shù)不能被const對象調用,只能被非const對象調用
per2.Add();

總結一下:

(1)const成員函數(shù),則不管是cosnt對象還是非const對象都可以調用const員函數(shù)。
(2)而非const得成員函數(shù)不能被const對象調用,只能被非const對象調用。
(3)普通函數(shù)(非成員函數(shù))末尾是不能加const, 編譯都無法通過。

四、const的克星mutable

mutable,翻譯成中文不穩(wěn)定的、容易改變的意思。與const正好是反義詞。而且mutable的引入也正是為了突破const的限制。

剛剛已經(jīng)看到,在末尾有const修飾的成員函數(shù)中,是不允許修改成員變量值的。那在設計類成員變量的時候,假如確實遇到了需要在const結尾的成員函數(shù)中希望修改成員變量值的需求,怎么辦呢?

也許有人會說,那就把函數(shù)末尾的const去掉,變成一個非const的成員函數(shù)。那就會引入一個新問題,如果這個成員函數(shù)從const變成一個非const的了,那么就不能被const對象調用。

所以,引入了mutable修飾符(關鍵字)來修飾一個成員變量。一個成員變量一旦被mutable所修飾,就表示這個成員變量永遠處于可變的狀態(tài),即使在以const結尾的成員函數(shù)中。

看如下范例:

class Persion{
public:
	void Get() const{
		a_ += 10;  //可以修改成員變量a_了
	}
	void Add(int x){
		a_ = a_ - x ;
	}
private:
	mutable int a_;
}

五、小結

開發(fā)中經(jīng)常使用,面試中也是經(jīng)常被問的,所以謹記于心。文章來源地址http://www.zghlxwxcb.cn/news/detail-505247.html

到了這里,關于C++技能系列 ( 2 ) - const的幾種使用【詳解】的文章就介紹完了。如果您還想了解更多內容,請在右上角搜索TOY模板網(wǎng)以前的文章或繼續(xù)瀏覽下面的相關文章,希望大家以后多多支持TOY模板網(wǎng)!

本文來自互聯(lián)網(wǎng)用戶投稿,該文觀點僅代表作者本人,不代表本站立場。本站僅提供信息存儲空間服務,不擁有所有權,不承擔相關法律責任。如若轉載,請注明出處: 如若內容造成侵權/違法違規(guī)/事實不符,請點擊違法舉報進行投訴反饋,一經(jīng)查實,立即刪除!

領支付寶紅包贊助服務器費用

相關文章

  • 【SpringBoot系列】實現(xiàn)跨域的幾種方式

    【SpringBoot系列】實現(xiàn)跨域的幾種方式

    前言 在Web開發(fā)中,跨域是一個常見的問題。由于瀏覽器的同源策略,一個Web應用程序只能訪問與其自身同源(即,相同協(xié)議、主機和端口)的資源。 這種策略的存在是為了保護用戶的安全,防止惡意網(wǎng)站讀取或修改用戶的數(shù)據(jù)。 然而,現(xiàn)代Web應用程序經(jīng)常需要訪問不同源的

    2024年02月01日
    瀏覽(18)
  • 【SpringBoot系列】接收前端參數(shù)的幾種方式

    【SpringBoot系列】接收前端參數(shù)的幾種方式

    前言 在現(xiàn)代Web開發(fā)中,前后端分離的架構已經(jīng)成為主流。前端負責展示頁面和用戶交互,而后端則負責處理業(yè)務邏輯和數(shù)據(jù)存儲。在這種架構下,前端需要將用戶輸入的數(shù)據(jù)發(fā)送給后端進行處理。而Spring Boot作為一種快速開發(fā)框架,提供了多種方式來接收前端數(shù)據(jù)。 本文將介

    2024年02月05日
    瀏覽(24)
  • C++中const char*、char const*和char * const的區(qū)別詳解

    ?? 1、const char* p: 2、char const*:? 等價于const char*; 用法如上,這里不過多解釋 ?3、char * const: 4、const char * const p = str 等價于 char const * const p=str ?? ?p的指向不能改變,p指向的內容也不能被改變; 5、?補充:

    2024年02月04日
    瀏覽(21)
  • 【SpringBoot系列】讀取yml文件的幾種方式

    【SpringBoot系列】讀取yml文件的幾種方式

    前言 在Spring Boot開發(fā)中,配置文件是非常重要的一部分,而yml文件作為一種常用的配置文件格式,被廣泛應用于Spring Boot項目中。Spring Boot提供了多種方式來讀取yml文件中的屬性值,開發(fā)者可以根據(jù)具體的需求和場景選擇合適的方式。本文將介紹Spring Boot讀取yml文件的主要方式

    2024年02月05日
    瀏覽(17)
  • 重學C++系列之const與static關鍵字分析

    重學C++系列之const與static關鍵字分析

    ? ? ? ? 本篇幅講解const與static,主要圍繞在類的范圍內敘述,包括作用和使用場景等。 ? ? ? ? 1、const修飾的成員變量,成員變量初始化后不能再修改。 ? ? ? ? 2、const修飾的成員函數(shù),成員函數(shù)不可以修改成員變量,也不能間接修改。 ? ? ? ? 3、static修飾的成員

    2024年02月15日
    瀏覽(23)
  • 【Mysql系列】mysql中刪除數(shù)據(jù)的幾種方法

    【Mysql系列】mysql中刪除數(shù)據(jù)的幾種方法

    在MySQL數(shù)據(jù)庫中,刪除數(shù)據(jù)是一個常見的操作,它允許從表中移除不再需要的數(shù)據(jù)。在執(zhí)行刪除操作時,需要謹慎,以免誤刪重要數(shù)據(jù)。 以下是MySQL中刪除數(shù)據(jù)的幾種方法: DELETE語句 DROP TABLE語句 TRUNCATE TABLE 使用外鍵約束 DELETE語句是最常用的刪除數(shù)據(jù)方法之一。它允許您根據(jù)

    2024年02月05日
    瀏覽(21)
  • C++實現(xiàn)回調函數(shù)的幾種方式

    通常認為通過函數(shù)指針在其他地方調用函數(shù)的過程稱為回調,被調用的函數(shù)稱為回調函數(shù),函數(shù)指針通過傳參方式傳遞。 在C++的實際應用中,有很多實現(xiàn)回調函數(shù)的方式,不一定要傳遞函數(shù)指針才能實現(xiàn)回調,只要實現(xiàn)了回調的功能,都叫回調函數(shù)。 回調函數(shù)是和調用者在

    2024年02月16日
    瀏覽(21)
  • 【C++】const關鍵字的詳解??!
  • C++中確保線程安全的幾種方式

    在 C++ 中,可以使用以下幾種方式來確保線程安全: 使用互斥量(mutex)來對共享資源進行保護?;コ饬靠梢杂脕矸乐苟鄠€線程同時訪問共享資源,從而避免數(shù)據(jù)競爭的問題。 使用讀寫鎖(reader-writer lock)來對共享資源進行保護。讀寫鎖允許多個讀線程同時訪問共享資源,但

    2023年04月17日
    瀏覽(28)

覺得文章有用就打賞一下文章作者

支付寶掃一掃打賞

博客贊助

微信掃一掃打賞

請作者喝杯咖啡吧~博客贊助

支付寶掃一掃領取紅包,優(yōu)惠每天領

二維碼1

領取紅包

二維碼2

領紅包