從來沒注意玩 casting 可以有幾多花臣,平常只是做普通承繼類的 casting。早前對比兩個相似的 timers 時,發覺其中一個用上兩個 casting,於是網上一查,原來 casting 可以很暴力,再看看一書 The C++ Programming Language 的附錄:casting away const (p.414),暈。
const_cast、static_cast、reinterpret_cast
(src: http://www.hala.bz/read.php?tid=7186&toread=1&fpage=1)
const_cast用於一些特殊場合可以覆寫變數的const屬性,利用cast後的指標就可以更改變數的內部,其語法如下:
const_cast<target_type>(expr)
以下為const_cast的簡單示範:
#include iostream
using namespace std;
void foo(const int*);
int main() {
int var = 10;
cout var = var endl;
foo(&var);
cout var = var endl;
return 0;
}
void foo(const int* p) {
int* v = const_castint* (p);
*v = 20;
}
執行結果:var = 10
var = 20
static_cast可用於轉換基底類別指標為衍生類別指標,也可用於傳統的資料型態轉換,其語法如下:
static_cast<target_type>(expr)
以下為static_cast的簡單示範:
#include iostream
using namespace std;
int main() {
int intVar;
float fltVar = 3.14159;
intVar = static_castint (fltVar);
cout intVar = intVar endl;
return 0;
}
執行結果:intVar = 3
reinterpret_cast用於將一種型態的指標轉換為另一種型態的指標,例如將void*轉換為char*,其語法如下:
reinterpret_cast<target_type>(expr)
以下為reinterpret_cast的簡單示範:
#include iostream
using namespace std;
int main() {
int i;
char* str = 測試;
i = reinterpret_castint (str);
cout i;
return 0;
}
執行結果:134514308
Google
No comments:
Post a Comment