在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++实现做什么,它都必须以某种方式记录它。这也使得它更有可能不会突然中断,因为实现者通常喜欢保持文档化的行为不变。