【发布时间】:2012-09-08 18:00:27
【问题描述】:
我有一个函数声明为:
void foo(unsigned int x)
如何检查 foo() 没有收到负数? 我希望如果我调用 foo(-1) 会引发异常, 但当然,由于 x 会自动转换为无符号,我无法检查它的积极性,例如:
if not(x>=0){ do_something();};
或类似的检查。
【问题讨论】:
-
为什么不直接使用
int? -
如果
foo被传递一个隐式转换的int,比较以确保x <= std::numeric_limits<int>::max() -
但是如果我通过的正是最大数量呢?
-
无法进行此项检查。但是,一个好的编译器会在看到需要在有符号和无符号之间转换的代码时发出警告。
-
@oldrinb 如果它被一个更大的 unsigned int 调用怎么办?基本上,没有办法区分显式使用的大数或负数转换产生的大数。