我怎么知道size_t作为参数在函数中是否有效?

时间:2018-10-15 11:39:05

标签: c++

即使size_t类型传递负数,它也总是正数。问题是我怎么知道它是有效的。

3 个答案:

答案 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并调用原始值。