我發現我的代碼中的錯誤,我認爲應該用警告標記。用/ W4編譯,但不顯示任何警告(只關於未引用的形式參數)。如何檢測從布爾鑄造
#include <cstdio>
void A(int item, unsigned int count, unsigned team_count)
{
printf("A, count, team count\n");
}
void A(int item, unsigned int count=1, bool is_team=true)
{
printf("A, count, is_team\n");
return A(item, count, is_team ? count : 0);
}
int main()
{
A(0, false); // <- bool to unsigned int
return 0;
}
這裏bool被轉換爲unsigned int。有什麼方法可以檢測到嗎? 試過Cppcheck但它沒有找到這個。
你可以檢測你的函數的這種使用的唯一方法是重新表達它作爲一個函數模板,這通常是不切實際的。然而值得了解,因爲在某些特殊情況下它可能非常方便。提示:通過用枚舉替換布爾參數,使用函數變得更加清晰和安全。 – 2014-10-18 09:54:55
這是一種煩人的語言「功能」。 – 2014-10-18 10:26:25
嗯,我想你知道默認的參數值並不像你想象的那麼方便。特別是當有其他過載時。一個是好的。兩個或更多,嗯,不。一個體面的*皮棉*應該給你一個診斷。 – 2014-10-18 10:32:26