難道有人請詳細說明不同之處嗎?static_cast <int>(foo)vs.(int)foo
回答
區別在於(int)foo可以表示六種不同的事物。 它可能是static_cast(在靜態已知類型之間轉換),它可能是const_cast(添加或刪除常量),或者它可能是reinterpret_cast(在指針類型之間轉換)
編譯器嘗試每個直到它找到一個有效的工作。這意味着它可能並不總是選擇你期望的,所以它可能會成爲一個微妙的錯誤來源。
此外,static_cast更容易搜索或搜索/替換。
(int)foo與C++ reinterpret_cast<int>
比較最多,即對演員表的有效性沒有檢查。
http://www.velocityreviews.com/forums/t280611-reinterpretcastltgt-v-staticcastltgt.html擴展了static_cast和reinterpret_cast之間的區別 – 2009-01-24 10:14:23
看什麼Stroustrup has to say about that,包括以下內容:
因爲C風格的類型轉換(T)可以用來表達許多邏輯上不同的操作,則編譯器只趕上濫用最起碼的機會。 [...]
引入了「新風格」,讓程序員有機會更清楚地陳述他們的意圖,並讓編譯器捕捉更多錯誤。 [...]
特別是,C++這種區別static_cast
之間reinterpret_cast
:
的想法是,通過允許的static_cast轉換有點不太可能導致比那些需要reinterpret_cast的錯誤。原則上,可以使用static_cast的結果而不將其重新轉換爲原始類型,而在使用reinterpret_cast的結果以確保可移植性之前,您應該始終將reinterpret_cast的結果轉換回原始類型。
- 1. <%= foo %>與$ {foo}
- 2. foo({1,2})如何爲「void foo(對<int,int>)」工作
- 3. + foo + vs。 foo。差異在PHP?
- 4. Angular2導入語法:「import * as <foo>」vs「import {<foo>}」
- 5. int foo = foo的標準參考
- 6. 這是什麼意思? int foo = foo + 4;
- 7. 哪個更好foo :: bar()VS $ foo :: bar()?
- 8. isinstance(foo,bar)vs type(foo)是吧
- 9. Rails 2.3.12:分別路由'GET/foo','PUT/foo'和'<any>/foo/bar'
- 10. foo(int * arr)和foo(int arr [])之間的任何區別?
- 11. var foo = foo ||警報(FOO);
- 12. 返回向量<Foo>或shared_ptr <vector<Foo>>?
- 13. func foo(arr [] int)int和func foo(arr [num] int)有什麼區別int
- 14. Foo <Ruby in Ruby
- 15. 從Foo轉換<Derived>到Foo <Base>
- 16. 如何在收到Foo <S>後構造Foo <T>?
- 17. <foo></foo>和JAXB中的null有什麼區別?
- 18. 語法「Foo(int v):val_(v){}」?
- 19. Preg_replace:「foo」,「bar」,「foo bar」和「bar foo」
- 20. 哪個`if(!isset($ foo)OR(isset($ foo)AND $ foo == $ bar))`或`if(!isset($ foo)OR $ foo == $ bar)`更好?
- 21. 是`foo as? Foo「在kotlin中完全等價於foo?foo?
- 22. mod_rewrite/foo到/index.php?id=foo AND/foo/foo2到/index.php?id=foo/foo2
- 23. 重寫index.php?foo = bar & bar = foo到index.php?foo = bar&bar = foo
- 24. 爲什麼const char * foo =「Hello」;編譯但不是const int * foo = 5;?
- 25. 如何將shared_ptr <Foo<Derived>>轉換爲shared_ptr <Foo<Base>>?
- 26. svn:URL <foo>現有dierctory <foo>不符合預期的網址<foo>
- 27. unordered_set <Foo>作爲Foo的數據成員?
- 28. 的Perldoc變量語法:$ foo的VS $ {} foo的
- 29. 「updatedb; locate foo」vs「ls -laR> somefile; grep foo somefile」
- 30. 速記if/else語句:foo?foo:bar vs foo ||吧
確切副本http://stackoverflow.com/questions/103512/in-c-why-use-staticcastintx-instead-of-intx – jalf 2009-01-24 10:11:27
感謝您的鏈接,賈爾夫。 – 2009-01-24 10:14:43