C++ const關(guān)鍵字分析詳解
C語言中修飾變量
在C語言中,被const修飾的是一個不能被修改的變量。
C語言中修飾指針變量
#include <stdio.h>
//代碼1
void test1()
{
int n = 10;
int m = 20;
int *p = &n;
*p = 20;//ok
p = &m; //ok
}
void test2()
{
//代碼2
int n = 10;
int m = 20;
const int* p = &n;
*p = 20;//err
p = &m; //ok
}
void test3()
{
int n = 10;
int m = 20;
int *const p = &n;
*p = 20; //ok
p = &m; //err
}
int main()
{
//測試無cosnt的
test1();
//測試const放在*的左邊
test2();
//測試const放在*的右邊
test3();
return 0;
}
結(jié)論:
1.const如果放在*的左邊,修飾的是指針指向的內(nèi)容,保證指針指向的內(nèi)容不能通過指針來改
變。但是指針變量本身的內(nèi)容可變。
2.const如果放在*的右邊,修飾的是指針變量本身,保證了指針變量的內(nèi)容不能修改,但是指
針指向的內(nèi)容,可以通過指針改變。
C語言中修飾函數(shù)的參數(shù)
C語言中修飾函數(shù)的返回值
C++中修飾變量
在C++中,被const修飾的已經(jīng)是一個常量,而且具有宏替換的屬性。
void TestConst()
{
const int a = 10;
int*pa =(int*)&a;
*pa = 100;
cout<<a<<endl;//10
//但是a的值已經(jīng)是100原因:在編譯階段,編譯器已經(jīng)將a用10替換了
cout <<*pa <<endl; // 100
}
const修飾的常量的替換發(fā)生在編譯階段,會參與參數(shù)類型檢測,代碼的安全性更高。
建議:在C++中使用const修飾的常量代替宏常量。
C++中修飾函數(shù)的參數(shù)
結(jié)論:修飾的是形參,表明在函數(shù)中不能對形參進行修改。
C++中修飾函數(shù)的返回值
結(jié)論:表明返回值不能修改,即在外部接收返回值時,只能以const類型的指針接受。
C++中修飾類的成員函數(shù)
結(jié)論:本質(zhì)是在修飾成員函數(shù)的this指針,即this指針指向?qū)ο笾械膬?nèi)容就不能被修改。
C++中修飾類的成員變量
結(jié)論:該成員變量不能修改,而且必須要在構(gòu)造函數(shù)初始化列表的位置訪問。

總結(jié)
本篇文章就到這里了,希望能夠給你帶來幫助,也希望您能夠多多關(guān)注腳本之家的更多內(nèi)容!
相關(guān)文章
OpenCV利用K-means實現(xiàn)根據(jù)顏色進行圖像分割
K-means是一種經(jīng)典的無監(jiān)督聚類算法---不需要人工干預(yù)。本文將通過K-means算法實現(xiàn)根據(jù)顏色進行圖像分割的效果,感興趣的小伙伴可以嘗試一下2022-10-10
VSCode遠程代碼開發(fā)及DNS隧道端口轉(zhuǎn)發(fā)實現(xiàn)遠程辦公代碼
這篇文章主要介紹了VSCode遠程代碼開發(fā)及DNS隧道端口轉(zhuǎn)發(fā)實現(xiàn)遠程辦公,本文通過圖文并茂的形式給大家介紹的非常詳細,對大家的學(xué)習(xí)或工作具有一定的參考借鑒價值,需要的朋友可以參考下2020-04-04
C++11新特性中auto 和 decltype 區(qū)別和聯(lián)系
這篇文章主要介紹了C++11新特性中auto 和 decltype 區(qū)別和聯(lián)系的相關(guān)資料,需要的朋友可以參考下2017-01-01
C語言實現(xiàn)3個數(shù)從小到大排序/輸出的方法示例
這篇文章主要給大家介紹了關(guān)于如何利用C語言實現(xiàn)3個數(shù)從小到大排序/輸出的相關(guān)資料,文中通過示例代碼介紹的非常詳細,對大家學(xué)習(xí)或者使用C語言具有一定的參考學(xué)習(xí)價值,需要的朋友們下面來一起學(xué)習(xí)學(xué)習(xí)吧2019-05-05

