即使size_t类型传递负数,它也总是正数。问题是我怎么知道它是有效的。
答案 0 :(得分:2)
您可以提高警告的级别,以便编译器拒绝从带符号的值初始化无符号的值的尝试。这样就不可能将负值传递给size_t
。
例如in gcc将-Wsign-conversion -Werror
作为附加的命令行参数传递
答案 1 :(得分:0)
你不知道。但是,假设您的函数是foo(size_t)
。您可以要做的是引入一组重载。
foo(const size_t&) // ToDo - consider replacing with `const int&`, `const long&` etc.
foo(const int&)
,依此类推。 const
引用可防止在呼叫站点隐式转换为size_t
。然后,您可以检查signed
值的符号以确认有效性。
答案 2 :(得分:0)
为ptrdiff_t
添加一个重载,这是最接近的相应带符号类型。在运行时,检查此过载是否为负值。如果是这样,请向用户投诉,否则将检查后的值转换为size_t
并调用原始值。