是否有理由使用无符号类型作为非负常数?

fir*_*ush 0 c++

我在代码审查中看到了类似的内容:

constexpr int64_t SOME_MAX = 2147483647;
Run Code Online (Sandbox Code Playgroud)

我最初的想法是添加一个请求,使其成为无符号类型,例如uint64_t.我的习惯是使用无符号整数来表示我知道应该总是积极的价值观.但后来我想知道这是否为常数增加了任何实际价值.有没有理由在c ++中将非负const设置为unsigned int类型?

Che*_*Alf 5

"有没有理由在c ++中将非负const设置为unsigned int类型?

将无符号类型用于常量的一个原因是它表示一个bitset.

另一个原因是它表示类型的最大值.

要表示特定的普通数字必须是非负数,您可以使用断言.要表明,例如,对于正式参数,您可以使用类型名称别名,例如using Positive_int = int;.要对给定的数字使用强制执行,您可以定义范围检查类型.


将普通数字常量定义为无符号类型可能会无意中将操作符参数提升为unsigned,并带有环绕.这种不受欢迎的影响从无到有,到恼人的编译器警告,到不正确的结果.支付范围指示是一个很高的代价,通过类型名称别名可以更清楚地传达.