我有一個功能,看起來像這樣:結合靜態斷言和斷言?
int div_round_up(int x, int y) {
/**
* This function only works for positive divisor and non-negative dividend!!
*/
assert(y > 0 && x >= 0);
if (x == 0)
return 0;
return (x - 1)/y + 1;
}
它不會與y <= 0
或x < 0
工作。沒關係,我甚至可以動態檢查正確的值,但是我想靜態檢查,當有人給它錯誤的值時。如果我將x和y定義爲無符號的,他們會默默地從負值轉換爲巨大的正值,這會產生錯誤的結果,所以我不希望這樣。如果有人試圖提供負值(如div_round_up(variable, -7)
),我想編譯失敗。我該怎麼辦?
嗯......你可能會遇到一些麻煩。你意識到'7'和'-7'具有相同的類型,對吧? – Brian
除非ISO'C++'委員會決定變得更聰明,否則你不能這樣做。最終你可以嘗試向他們寫一個提案。我已經勾勒出了基礎知識,但真的不想再費心了。你可以在這裏查看 - https://groups.google.com/a/isocpp.org/forum/#!topic/std-proposals/6qGR67u-Z9I。或者嘗試使用一些不同的語言,例如「D」。或者,你可以編寫另一個你的函數的模板版本,並且在使用編譯常量時以不同的方式實例化它。 – AnArrayOfFunctions
我很確定你不能這麼做 - static_assert不能這樣工作。 –