2016-09-20 57 views
0
double d = 43.56; 
int m = d; 
cout<<(char *)&m<<endl; //works fine, it prints: + = 43 
cout<<(char *)m<<endl; //this doesn't work, char can't be made into a pointer 
cout<<reinterpret_cast<char *>(&m)<<endl; //works fine, prints: + 
cout<<static_cast<char *>(&m)<<endl; //Does not work 

我的問題是,爲什麼最後一行代碼不起作用?類型轉換時出錯。混亂

編譯器錯誤消息:從int *無效的static_cast到char *類型

不應該的static_cast能轉換嗎?

在此先感謝。

+0

你期待它打印'43'作爲字符串嗎? – LogicStuff

+0

我不明白。爲什麼'(char *)m'沒有工作?我們經常在嵌入式系統中使用它來爲指針分配硬件組件的地址。 –

+0

您可能會將鑄造與'operator <<'的可用重載混淆。例如'cout'將打印一個char *'作爲一個字符串;但是'void *'作爲指針。 –

回答

1

Here是可以用static_cast完成什麼的完整列表。並且 沒有選項可以將指針轉換爲一個類來指向另一個不相關的類。只是因爲這不是標準的C++行爲。
但是仍然可以使用c-style cast,reinterpret_cast甚至可以使用union來「鑄造」。