c - arr[0] = arr[1] = C 中的值是不好的做法吗?
问题描述
正如我上面所说,这是不好的做法吗?在 ASM 中它会是什么样子?我的意思是,我不知道它是否被翻译成这样的东西:
arr[0] = value;
arr[1] = value;
或者是这样的:
arr[1] = value;
arr[0] = arr[1];
第二个显然效率更低(imm vs mem)。
提前致谢。
解决方案
根据 C 语法赋值运算符从右到左求值。
所以这个说法
arr[0] = arr[1] = value;
相当于
arr[0] = ( arr[1] = value );
来自 C 标准(6.5.16 赋值运算符)
3 赋值运算符将值存储在左操作数指定的对象中。赋值表达式在赋值后具有左操作数的值,111) 但不是左值。赋值表达式的类型是左操作数在左值转换后的类型。更新左操作数的存储值的副作用是在左操作数和右操作数的值计算之后排序的。操作数的评估是无序的。
所以根据报价你可以考虑这个声明
arr[0] = arr[1] = value;
喜欢
arr[1] = value;
arr[0] = arr[1];
至于效率,编译器可以生成与您想象的源代码不同的高效目标代码。
推荐阅读
- node.js - TypeScript 在 Node.js 依赖项中找不到命名空间
- asp.net - MSSQL 和 EntityFramework - 存储和读取 UTC 日期时间
- python - 我的程序运行良好,但我不明白为什么?与函数和嵌套列表有关
- julia - Julia Roots find_zero 与 ForwardDiff.Dual 类型?
- reactjs - 如何在 AWS API(graphQL) 中创建连接
- reporting-services - SSRS 如何按外部组行摘要划分行结果
- java - 处理 EntityNotFoundException
- pdf - Ghostscript - 从 pdf 创建 png 时指定输出大小
- vue.js - 如何在 nextcloud/vue 中获取文件路径
- vaadin - 如何防止 Vaadin Flow 中的选项卡选择更改