我有一个功能,看起来像这样:结合静态断言和断言?
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不能这样工作。 –