const_cast的用法
C++提供了四個轉換運算子:
· const_cast <new_type> (expression)
· static_cast <new_type> (expression)
· reinterpret_cast <new_type> (expression)
· dynamic_cast <new_type> (expression)
它們有著相同的結構,看起來像是模板方法。這些方法就是提供給開發者用來進行指標和引用的轉換的。
一、用法
const_cast<type_id> (expression)
該運算子用來修改型別的const或volatile屬性。除了const 或volatile修飾之外, type_id和expression的型別是一樣的。
1 常量指標被轉化成非常量的指標,並且仍然指向原來的物件;
2 常量引用被轉換成非常量的引用,並且仍然指向原來的物件;
二、案例
class B
{
public:
B() { }
public:
int m_iNum;
};
void foo()
{
const B b1;
//b1.m_iNum = 100; //compile error
// 可以做如下轉換,體現出轉換為指標型別
B *b2 = const_cast<B*>(&b1);
// 或者左側也可以用引用型別,如果對b2或b3的資料成員做改變,就是對b1的值在做改變
B &b3 = const_cast<B&>(b1);
b2->m_iNum = 200; //fine
b3.m_iNum = 300; //fine
}
int main( int argc, char * argv[] )
{
foo();
return 0;
}
上面程式碼可執行,不會報錯,錯誤程式碼已經註釋。去掉下面程式碼行的註釋號後會報錯,因為b1之不可修改。
使用const_cast可以返回一個指向非常量的指標(或引用)指向b1,就可以通過該指標(或引用)對它的資料成員任意改變。
相關文章
- C++中static_cast, dynamic_cast, const_cast用法/使用情況及區別解析C++AST
- C++ 型別轉換詳解 -- const_castC++型別AST
- C++之static_cast,dynamic_cast,const_castC++AST
- Qdrant用法;Qdrant在langchain裡的用法LangChain
- SQL AS 的用法SQL
- SUBMIT 的用法MIT
- indexOf()的用法Index
- Promise的用法Promise
- PHPdefine()的用法PHP
- SqlParameter的用法SQL
- Tcpdump 的用法TCP
- Javascript 的 this 用法JavaScript
- top的用法
- iptables的用法
- tie的用法
- SqlServer的with(nolock)的用法SQLServer
- Oracle的Cast的用法OracleAST
- jQuery的:checked的用法jQuery
- PHP Session的用法PHPSession
- meta元素的用法
- React Hooks 的用法ReactHook
- MongoDB的基本用法MongoDB
- React ref的用法React
- webpack的基本用法Web
- rematch的基本用法REM
- Pythonyield的用法Python
- Vue slot的用法Vue
- Mysql LIMIT的用法MySqlMIT
- Promise的基本用法Promise
- js中的this用法JS
- Seajs的用法JS
- *html的CSSHacks用法HTMLCSS
- java Properties的用法Java
- golang range的用法Golang
- 【SqlServer系列】AS的用法SQLServer
- Oracle Hints的用法Oracle
- oracle job的用法Oracle
- OpenCV的SVM用法OpenCV