1
4
是的,形式上不确定值的rvalue转换是UB(除了
我懒得为你做标准的段落查找,也懒得去关心那次的否决票 然而,在实践中,只有一个问题(1)古老的架构,也许(2)64位系统。 编辑 :oops,我现在似乎想起了一篇关于访问不确定字符的正式UB的博客文章和相关的缺陷报告。所以也许我得检查一下标准,+搜索博士。阿尔格,那得晚些时候,现在咖啡! 编辑2 :Johannes Schaub很好地提供了这个 link to SO question 讨论了访问char的UB。所以,那就是我记得的地方!谢谢,约翰。 干杯。, |
2
6
这个问题的答案随着最新的C++ 1Y工作草案而改变。
接下来列出了一些例外情况 无符号窄字符类型 只是,我有一个完整的报价 Has C++1y changed with respect to the use of indeterminate values and undefined behavior? .
所以对你来说
以前我们需要使用左值到右值的转换来证明这是未定义的,但是这是有问题的,因为 the conversion is underspecified . 请注意,不确定值在本节中是斜体化的,因此意味着它被定义在适当的位置,因此现在C++ 1Y实际上定义了这个术语。以前这个术语没有定义,这在 defect report 616 . |
3
5
打开
脚注说明:
|
4
0
阅读一个不确定的值通常会导致不确定的行为,这不仅仅是一个“理论”问题。即使对于所有可能的位模式都定义了值的类型,也不应认为不确定值的行为方式不同于未指定值是“令人惊讶的”。例如,如果*p包含不确定值,并且除了 如图所示,代码:
可以重写为:
如果*p的值是不确定的,编译器就不会被禁止 两个“if”语句之间的代码修改了它的值。 例如,如果*p占用的存储器被“float”占用 在释放和重新malloc'ed之前,编译器可能会编写“float” 上述两个“if”语句之间的值。 |
Xirema · 如何正确编写运算符的R值重载 7 年前 |
Mário Feroldi · 在运行时调用代码中未调用的函数 7 年前 |
chqrlie · 所有位0都可以是整数的陷阱表示吗? 7 年前 |
Vincent · 打印零,但不基于该条件退出循环 7 年前 |
Dror K. · 用%p打印空指针是未定义的行为? 7 年前 |
Bite Bytes · C中允许这种函数调用吗 7 年前 |
K J Gor · C中strncpy的内存混淆 8 年前 |