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++
- 知識點總結
- linux知識知識點總結Linux
- HDFS知識點總結
- MongoDB知識點總結MongoDB
- Java 知識點總結Java
- django知識點總結Django
- jQuery 知識點總結jQuery
- MySQL知識點總結MySql
- HBase知識點總結
- Kafka知識點總結Kafka
- JavaScript知識點總結JavaScript
- iOS 知識點總結iOS
- Java知識點總結Java
- pga知識點總結
- E1線路知識點總結(轉)
- 資料結構第一章知識點歸納總結資料結構
- CSS知識點面試總結CSS面試
- HBase知識點集中總結
- 事務知識點總結
- 知識點漏缺總結
- 前端知識點總結——Vue前端Vue
- java面試知識點總結Java面試
- 前端知識點總結——HTML前端HTML
- 前端知識點總結——DOM前端
- Java 面試知識點總結Java面試
- RabbitMQ 常用知識點總結MQ
- Tomcat 知識點總結Tomcat
- MySQL 索引知識點總結MySql索引
- HTML-知識點總結HTML
- 升級_知識點總結
- iOS GCD知識點總結iOSGC
- Spring知識點總結Spring
- Hibernate知識點總結
- Velocity知識點總結
- (5)FIFO知識點總結