隐式转换为 size_t?

Ale*_*ach 1 c++ size-t

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

size_t value = 100;
Run Code Online (Sandbox Code Playgroud)

将“u”文字添加到值中以防止这种转换是否有意义,就像这样?

size_t value = 100u;
Run Code Online (Sandbox Code Playgroud)

eer*_*ika 8

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

size_t value = 100;
Run Code Online (Sandbox Code Playgroud)

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

将“u”文字添加到值中以防止这种转换是否有意义,就像这样?

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

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


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