隐式转换为 size_t?

Implicit cast to size_t?

我想知道 - 当我们用某个值初始化 unsigned size_t 时,C++ 是否会进行隐式转换? 像这样:

size_t value = 100;

将 'u' 字面量添加到值中以防止此强制转换有意义吗?

size_t value = 100u;

does C++ do implicit cast when we initialize unsigned size_t with some value? Like this:

size_t value = 100;

是的。 std::size_t 是一个(别名)整数类型。整数类型可以隐式转换为所有其他整数类型。

And does it make sense to add 'u' literal to the value to prevent this cast, like this?

仍然可能存在带有 u 文字后缀的隐式转换,因为 std::size_t 不一定(通常也不)是 unsigned int。例如,它可能是 unsigned long intunsigned long long int。有一个标准建议为 std::size_t 别名添加整数文字,但目前不存在。

在此示例中,使用匹配的文字并不重要,只要文字的类型可以表示所讨论的值,并且只要文字值不超过初始化类型的范围即可.即使是最小的整数类型也可以表示 100。选择很大程度上取决于品味。


请注意,“隐式转换”是一个自相矛盾的术语。 Cast是显式转换。