在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的示例吗?
答案 0 :(得分:4)
不是未定义的,只是实现已定义。
[conv.integral]
3如果目标类型是带符号的,则该值可以保持不变 以目标类型表示;否则,值为 实现定义的。
因此,无论您使用C ++做什么,都必须以某种方式对其进行记录。这也使得它不会突然中断的可能性更大,因为实现者通常喜欢保持记录的行为不变。