2014-10-27 56 views
2

我讀過static_cast規則。static_cast的特殊規則

static_cast<new_type> (expression) 

... ...

5)如從NEW_TYPE到表達式的類型的隱式轉換的序列存在, 不包括左值到右值,陣列到指針,指向函數, 空指針,空成員指針或布爾轉換,然後static_cast可以執行該隱式轉換的逆操作;

問題有人可以解釋或編寫這個規則的例子嗎?

+1

否「爲我做作業」的問題。 – 2014-10-27 16:07:32

+2

這不是我的作業:)我不明白這個規則。 – Khurshid 2014-10-27 16:10:00

+1

@ Triton:這個問題沒有錯。 – 2014-10-27 17:43:59

回答

2

下面是一個隱式轉換:

int n; 
void *p = &n; // OK: int* to void* is an implicit converion 

逆變換不能隱完成:

int *pi = p; // ERROR 

而且,通過該規則,可以用static_cast做到:

int *pi = static_cast<int*>(p); // OK 

該規則列出了一些隱含的轉換,這些轉換不能使用static_cast

bool b = p;      // OK: void* to bool can be implicit 
void *p2 = static_cast<void*>(b); // ERROR: can't be undone with static_cast