最近我絆瞭如下代碼:編譯器切換爲禁用c樣式轉換中的const_cast語義?
void foo(const Bar* b) {
...
takes_nonconst_param_fn((Bar*)b);
...
顯然,開發商根本不知道他在做什麼,但如果編譯器早已不是默默接受C風格的鑄造和至少需要一個合適的const_cast
,他可能會在做這件事之前兩次。因此,這讓我想到,現代編譯器是否有一個開關,以防止C語言風格的const_cast
語義?
這簡直是不實際的,以防止C-風格類型轉換的所有出現,這是一個必要之惡,讓他們static_
和reinterpret_
語義(如果僅僅是一些庫代碼),但我的印象是,C-的合法使用拋棄const4的樣式拋出在代碼庫中非常罕見,所以也許應該可以完全禁用它。
如果你將foo聲明爲'void foo(const Bar * b)const',它會有什麼區別嗎? – James 2011-04-13 14:24:36
@詹姆斯:你爲什麼期望影響外顯表演的效果?如果'foo'是一個成員函數,那麼這會使函數內的對象成員爲'const';如果不是,那麼這將是一個錯誤。 – 2011-04-13 14:45:39
其實我希望我可以禁用所有,但他們的'static_cast'形式。 – 2011-04-13 14:51:33