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

时间:2018-11-12 13:20:08

标签: c++ undefined-behavior

在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的示例吗?

1 个答案:

答案 0 :(得分:4)

不是未定义的,只是实现已定义。

  

[conv.integral]

     

3如果目标类型是带符号的,则该值可以保持不变   以目标类型表示;否则,值为   实现定义的。

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