【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.只有常成員函數才可以操作常對象,即常對象只能調用常成員函數。
const有兩個作用,1.表示只讀;2.表示常量。
C++11中可以使用const來表示只讀,用constexpr表示常量表達式。
常量表達式可以在編譯階段就直接計算出來,提高程序運行效率。而非常量表達式只能在程序運行時計算出來。
可以使用constexpr限定函數也為常量表達式,前提是該函數中只能操作常量。假如該函數中使用了任意非常量的操作,例如for(it i=0;i<10;++i)循環語句,constexpr就會被忽略。
總結
以上是生活随笔為你收集整理的【c++】1.const和constexpr相关知识的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 【opencv】1.opencv安装、编
- 下一篇: 【opencv】2.opencv绘图、视