是否将size_t(大于int范围)分配给int UB



在Linux x86_64:上

size_t some_constant = std::numeric_limits<size_t>::max();
int my_int = some_constant;
size_t my_size_t = my_int;
cout << (my_size_t == some_constant) << endl;

这将打印1

这是UB的一个例子吗?

没有定义,只是定义了实现。

[conf.integral]

3如果目标类型是签名的,则如果可以以目的地类型表示;否则,值为实现定义。

因此,无论您的C++实现做什么,它都必须以某种方式记录它。这也使得它更有可能不会突然中断,因为实现者通常喜欢保持文档化的行为不变。

最新更新