C++primer1-7章知識點總結——顯示轉換
warning:雖然有時候不得不使用強制型別轉換,但這種方法本質上是非常危險的!
命名的強制型別轉換:
形式:
cast-name<type>(expressopn)
//type是expression要轉換的值。如果type是引用型別,則結果是左值。
static_cast
任何具有明確定義的型別轉換,只要不包含底層const,都可以使用static_cast。
//進行強制型別轉換以便執行浮點數除法
double slope = static_cast<double>(j) / i;
當需要把一個較大的算術型別賦值給較小的型別時,static_cast非常有用。(可以遮蔽編譯器的警告資訊,因為我們明確告知編譯器不在乎損失潛在的精度)
對於編譯器無法自動執行的型別轉換也非常有用。
eg:
//使用static_cast找回存在於void*指標中的值
void* p = &d;
double *dp = static_cast<double*>(p) ;
這樣操作時要注意確保指標的值保持不變。
也就是說強制轉換的結果將與原始的地址值相等,因此我們必須確保轉換後所得的型別就是指標所指的型別。型別一旦不符,將產生未定義的後果。
const_cast
只能改變運算物件的底層const,不能用其改變表示式的型別。
const char *pc;
char *p = const_cast<char*>(pc);//正確,但通過p寫值是未定義的行為
//上述行為我們一般稱其為“去掉const性質“
reinterpret_cast
使用該轉換是非常危險的,其本質上依賴於機器。
為運算物件的為模式提供較低層次上的重新解釋。
eg:
int *ip;
char *pc = reinterpret_cast<char*>(ip)
//pc所指的真實物件是一個int而非字元!
string str(pc);//錯誤,會產生導致異常執行的行為!
相關文章
- C++primer1-7章知識點總結——sizeof運算子C++
- C++primer1-7章知識點總結——頂層const與底層constC++
- C++primer1-7章知識點總結——vector以及迭代器的相關運用C++
- 知識點總結
- Java 知識點總結Java
- django知識點總結Django
- iOS 知識點總結iOS
- MongoDB知識點總結MongoDB
- HDFS知識點總結
- HBase知識點總結
- jQuery 知識點總結jQuery
- Kafka知識點總結Kafka
- Tomcat 知識點總結Tomcat
- MySQL知識點總結MySql
- 前端知識點總結——Vue前端Vue
- 知識點漏缺總結
- 事務知識點總結
- HBase知識點集中總結
- 前端知識點總結——HTML前端HTML
- 前端知識點總結——DOM前端
- docker常用知識點總結Docker
- mysql 常用知識點總結MySql
- (5)FIFO知識點總結
- HTML-知識點總結HTML
- RabbitMQ 常用知識點總結MQ
- MySQL 索引知識點總結MySql索引
- 跨域知識點部分總結跨域
- Java基礎知識點總結Java
- java面試知識點總結Java面試
- 總結的小知識點(一)
- 筆試題知識點總結筆試
- 瀏覽器知識點總結瀏覽器
- HTTP協議知識點總結HTTP協議
- Vue學習知識點總結Vue
- 總結的Java知識點集合Java
- HTML5知識點總結HTML
- CSS知識點面試總結CSS面試
- 總結 MySQL 相關知識點MySql