難道有人請詳細說明不同之處嗎?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 + vs。 foo。差異在PHP?
- 2. Angular2導入語法:「import * as <foo>」vs「import {<foo>}」
- 3. 這是什麼意思? int foo = foo + 4;
- 4. int foo = foo的標準參考
- 5. Rails 2.3.12:分別路由'GET/foo','PUT/foo'和'<any>/foo/bar'
- 6. foo(int * arr)和foo(int arr [])之間的任何區別?
- 7. var foo = foo ||警報(FOO);
- 8. 返回向量<Foo>或shared_ptr <vector<Foo>>?
- 9. func foo(arr [] int)int和func foo(arr [num] int)有什麼區別int
- 10. 語法「Foo(int v):val_(v){}」?
- 11. 從Foo轉換<Derived>到Foo <Base>
- 12. <foo></foo>和JAXB中的null有什麼區別?
- 13. 哪個`if(!isset($ foo)OR(isset($ foo)AND $ foo == $ bar))`或`if(!isset($ foo)OR $ foo == $ bar)`更好?
- 14. mod_rewrite/foo到/index.php?id=foo AND/foo/foo2到/index.php?id=foo/foo2
- 15. 是`foo as? Foo「在kotlin中完全等價於foo?foo?
- 16. unordered_set <Foo>作爲Foo的數據成員?
- 17. 的IEnumerable的<foo>
- 18. var foo =(function(){...})(); ... FOO()不工作
- 19. Foo無法投射到Foo
- 20. foo = foo有意義嗎?
- 21. 更快$ foo? $ foo的:「棒」
- 22. 爲什麼「foo = foo || {};」不行?
- 23. 如何將IEnumerable <IEnumerable <Foo>>減少到IEnumerable <Foo>?
- 24. 是否<img alt="foo" />等於<img alt="foo"></img>?
- 25. std :: unordered_set <Foo>作爲Foo類的成員
- 26. typedef Foo <> Foo編譯但它有效嗎?
- 27. 從新的懶惰<Foo>()到新的懶惰<Foo>(()=> new Foo())有什麼不同?
- 28. Binding ObservableCollection <Foo> to ObservableCollection <object>
- 29. 在Linq中將Dictionary <int,Dictionary <int, Foo>>轉換爲IEnumerable <IEnumerable <Foo>>的最簡單方法是什麼?
- 30. 如何使用JAXB解析<foo value1 =「a」value2 =「b」> value3</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