日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程语言 > c/c++ >内容正文

c/c++

【c++】1.const和constexpr相关知识

發布時間:2025/3/21 c/c++ 36 豆豆
生活随笔 收集整理的這篇文章主要介紹了 【c++】1.const和constexpr相关知识 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

const和constexpr相關知識

記憶法:
const是常量,*是指針,const * 按順序念就是【常量指針】, * const 按順序念就是【指針常量】。

const int * p; //p是常量指針,p是const int *,const限定的是int,即指針指向的地址中存儲的值(int型),所以這種寫法不能修改指針指向的地址的中存儲的值,但是可以修改指針的指向。
int * const p; //p是指針常量,p是int*,const限定的是指針,即不能修改指針指向,但是可以修改指針指向的地址中存儲的值,

類中的this指針指向成員函數所屬的類對象,并且this指針只能在類的成員函數中調用。
this指針的本質,就是指針常量, 即【類名 * const this】,this指針的指向不能修改,如 this=NULL是不合法的;但是this->m_Age=30是合法的,其中m_Age是類成員變量。

const 類名 * const this
常函數:在類的成員函數的括號后面,{}前面,加const就是常函數。
常函數內不允許修改成員變量,除了mutable定義的成員變量。
在常函數中不能修改指針指向的值,如this->m_Age=30不合法。可以在變量前加上mutable關鍵字mutable后就可以修改了。
如果類成員函數func()定義為常函數:
int func()const{...}
即在類的成員函數后面加const,相當于【const 類名 * const this】中的第一個const,修飾的是this指針,this指針指向的值也不能修改;
又由于本來this指針就不能改變指向,所以這種寫法就既不能改變this指針的指向,也不能改變this指針調用的成員變量的值,即在該函數中this->m_Age=30和 this = NULL 都不合法。

常對象:初略記了一下,并不完整。
常對象只能調用常成員函數,常對象不允許修改成員變量,但是并不是說常對象所屬的類的成員函數都是常成員函數,他也包括非常成員函數。
1.常函數成員既可以使用常數據成員也可以使用非常數據成員;
2.只有常成員函數才可以操作常對象,即常對象只能調用常成員函數。

class Person{public:int m_Age;mutable int m_Height; //加上mutable關鍵字后就可以對const限定不能修改值的變量進行賦值了。 }; void test() {const Person person1; //不能修改常對象person1的各個成員變量的值。person1.m_Age = 30; //不合法person1.m_Height = 180; // 合法 }

const有兩個作用,1.表示只讀;2.表示常量。

C++11中可以使用const來表示只讀,用constexpr表示常量表達式。
常量表達式可以在編譯階段就直接計算出來,提高程序運行效率。而非常量表達式只能在程序運行時計算出來。

可以使用constexpr限定函數也為常量表達式,前提是該函數中只能操作常量。假如該函數中使用了任意非常量的操作,例如for(it i=0;i<10;++i)循環語句,constexpr就會被忽略。

總結

以上是生活随笔為你收集整理的【c++】1.const和constexpr相关知识的全部內容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。