i=++i等的未定义的行为规则
Undefined behaviour rules for i = ++i and the like
我一直在复习我未定义的行为规则,并阅读了以下内容:
未定义的行为和序列点
为什么f(i=-1,i=-1)是未定义的行为
为什么`x->0 `不是未定义的行为,而`x=x-`是?
而且在C++11中,"i+=++i+1"是否表现出未定义的行为?
最后提出了三个问题:
- 形式为
i=i++
的项的未定义行为规则适用于非积分类型吗?(表达式应该转换为i.operator(i.operator++(i))
,因为每个函数调用都是一个序列点,所以如果我正确理解标准的话,它应该定义得很好) - 为什么
f(i=-1, i=-1)
与"赋值运算的结果是赋值后存储在左操作数中的值;结果是左值"(ref)结合使用时会出现未定义的行为[https://stackoverflow.com/a/4190054/258418]?(我知道I的值后来是未定义的,但如果我正确理解标准,函数调用应该被评估为f(-1, -1)
- 哪些类型的表达式在c++11/14/1z中是安全的,只有简单赋值中的预增量/预增量(没有
op=
)
忘记f (i = -1, i = -1)
。假设您有两个指针int* p
和int* q
,并且您调用
f (*p = 1, *q = 2)
如果p==q,这是未定义的行为。如果你不希望它是未定义行为,那么在p==q的情况下,你将如何定义行为?(因为如果你不喜欢它是未定义的,你就必须用某种方式来定义它)。此外,你会接受行为的定义吗?这意味着99.999%的代码可能会运行得慢一点,以保存一些明显愚蠢的代码?
然后是
f (*p = -1, *q = -1)
因此,指定了相同的值。如果你希望这是一种定义的行为,但不分配不同的价值观,你究竟如何建议将其纳入一条合理的规则?
相关文章:
- 编译C++时未定义的引用
- vscode g++链路故障:体系结构x86_64的未定义符号
- 如何修复此错误:未定义对"距离(浮点数,浮点数,浮点数,浮点数,浮点数)"的引用
- 我的项目不会像"undefined reference to `grpc::g_core_codegen_interface'"那样使用未定义的引用错误进行编译
- 不知道某个东西是否被忽略会引入未定义的行为吗
- 对C宏的未定义引用,但在定义它时会出现重新定义错误
- 未定义的引用在哪里
- 编译时的 CImg 库返回对"__imp_SetDIBitsToDevice"的未定义引用
- 对Py_Initialize()的未定义引用
- c++11评估顺序(未定义的行为)
- 使用mysql c++连接器的未定义引用
- 从python调用openMP共享库时,未定义opnMP函数
- 在 Mac 上使用 CMAKE 将 FFTW 和 FFTWPP 链接到项目中时未定义的符号
- Cmake 链接问题:未定义对 Button::mousePressEvent(QGraphicsSceneMouseE
- 未定义的引用 .. 使用 OpenCV 编译 C++ 代码时,从命令行
- 具有外部"c"和程序集的未定义函数
- C++ mapnik 未定义对规则的引用
- 小对象堆栈存储,严格混叠规则和未定义行为
- i=++i等的未定义的行为规则
- 未定义的行为-是用其他语言编写的函数,受C++关于UB的规则的约束