“双重”分配——应该避免吗?

2024-01-28

考虑一下你有一些像这样的表达

i = j = 0

假设这是在您选择的语言中明确定义的。通常将其分成两个表达式会更好吗

i = 0
j = 0

我有时会在库代码中看到这一点。就简洁性而言,它似乎并没有给您带来太多好处,并且不应该比这两个语句执行得更好(尽管这可能取决于编译器)。那么,有理由使用其中一种而不是另一种吗?或者这只是个人喜好?我知道这听起来像是一个愚蠢的问题,但它已经困扰我很长时间了:-)。


曾几何时,存在性能差异,这也是使用这种分配的原因之一。编译器会转i = 0; j = 0; into:

load 0
store [i]
load 0
store [j]

所以你可以使用保存指令i = j = 0因为编译器会将其转换为:

load 0
store [j]
store [i]

如今编译器可以自己进行这种类型的优化。此外,由于当前的 CPU 同时运行多个指令,性能不再能够简单地用指令数量来衡量。一个操作不依赖于另一个操作的结果的指令可以并行运行,因此为每个变量使用单独值的版本实际上可能会更快。

关于编程风格,您应该使用最能表达代码意图的方式。

例如,当您只想清除某些变量时,您可以链接分配,并在值具有特定含义时将其单独分配。特别是如果将一个变量设置为某个值的含义与将另一个变量设置为相同值的含义不同。

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

“双重”分配——应该避免吗? 的相关文章

  • C# 编码指南 [重复]

    这个问题在这里已经有答案了 可能的重复 C 编码标准 最佳实践 https stackoverflow com questions 14967 c coding standard best practices 您推荐哪些最流行 最合理且最详
  • 私有与受保护 - 可见性良好实践问题[关闭]

    Closed 这个问题是基于意见的 help closed questions 目前不接受答案 我一直在寻找 我知道理论上的区别 public 任何类 函数都可以访问该方法 属性 受保护的 只有此类和任何子类可以访问方法 属性 privat
  • Juval Lowy 的 C# 编码标准问题

    我喜欢并强烈推荐朱瓦尔 洛伊 http www idesign net C 编码标准 http www idesign net Downloads GetDownload 1985 Juval 明确避免了每个指令的基本原理 以保持标准的严格
  • 为什么.NET的StringValidator的Validate方法在不成功时会抛出异常?

    正如你在MSDN StringValidator 文档 http msdn microsoft com en us library system configuration stringvalidator aspx the Validate
  • 强制使用牙套

    作为我不久前写的代码标准文档的一部分 我强制要求 您必须始终对循环和 或条件代码块使用大括号 即使 特别是 它们只有一行 Example this is wrong if foo bar else baz while stuff thing
  • C++ 编码指南 102

    如果您被允许在 101 条准则中添加另一个编码准 则 C 编码标准 Herb Sutter 和 Andrei Alexandrescu http www gotw ca publications c cs htm 您会添加哪一个 一年后再写
  • Java:在循环中实例化变量:好还是坏风格?

    我有一个简单的问题 通常我会写这样的代码 String myString hello for int i 0 i lt 10 i myString hello again 因为我认为以下不会是好的样式 因为它会创建太多不必要的对象 for
  • 迭代还是使用计数器,这就是问题

    每当有人开始使用 STL 并且他们有一个向量时 您通常会看到 vector
  • 内部应用程序 - 为什么不公开所有内容?

    我是否有理由不应该在我们的 Intranet 报告应用程序中将所有内容标记为公开 公司之外的任何人都无法访问此代码 我们有大约 20 个项目 大多数都是小型且具体的 我们真的应该将事物标记为公开以外的任何东西吗 我对此有自己的想法 但我试图
  • 如何用好Fortran语句标签?

    我正在开发一个用 Fortran 95 编写的模型 我对此完全陌生 语句标签的概念似乎很奇怪 到目前为止我只找到了标签可以由作者任意决定的解释 通常以 10 为增量 除了更容易地找出语句的结尾位置之外 这些标签还有其他实际用途吗 以及关于如
  • int i 与 int index 等哪个更好? [复制]

    这个问题在这里已经有答案了 可能的重复 名为 i 的变量是不可接受的吗 https stackoverflow com questions 130775 is a variable named i unacceptable 循环变量的理想变
  • Checkstyle 规则防止调用某些方法和构造函数

    是否可以使用 Checkstyle 来禁止使用某些使用系统相关默认值 区域设置 字符集等 的构造函数或方法 我更喜欢强制执行一项政策 程序员应该明确了解系统相关的值 所以我认为以下物品是危险的 all the constructors of
  • 如何更改所有 ListView 的默认分隔线颜色

    我正在尝试为 style xml 中的所有 listView 应用默认样式 请注意 在某些地方我使用嵌套列表视图 In 样式 xml
  • “if”在 ASP.NET MVC View (.aspx) 文件中被认为有害?

    我记得看到一个博客 或其他内容 说你不应该在 ASP NET MVC 的 aspx 文件中使用 但我不记得它说的替代方案是什么 有人记得看过这个并指出我吗 基本上 这意味着您的视图中不应该有大量的 if 语句 您的控制器和视图模型应该能够处
  • 为什么在 C++ 类中的数据成员上使用像 m_ 这样的前缀?

    许多 C 代码使用语法约定来标记数据成员 常见的例子包括 m memberName对于公共成员 在所有使用公共成员的情况下 memberName对于私人会员或所有会员 其他人尝试强制使用this gt member每当使用数据成员时 根据我
  • Cleancode:在 Promise 中尝试/捕获

    我正在研究 redux form atm 并找到了这段代码 它对我有用 但是有没有更干净的方法可以用 ES6 风格编写它 const asyncValidate values dispatch gt return new Promise r
  • C++ getter 和 setter 最佳风格

    Java 代码约定简单明了 采用这种风格 public int GetMyAge return myAge void SetMyAge int myAge this gt myAge myAge private int myAge 我知道这
  • PHP_CodeSniffer规则文档[关闭]

    Closed 这个问题正在寻求书籍 工具 软件库等的推荐 不满足堆栈溢出指南 help closed questions 目前不接受答案 在哪里可以找到有关的文档PHP CodeSniffer http pear php net packa
  • Python 中的参数命名约定

    对于形式参数密切相关的函数 例如 def add two numbers n1 n2 return n1 n2 def multiply two numbers n1 n2 return n1 n2 如上所示 为两个函数中的参数指定相同的名
  • 在 Eclipse 中删除空块之前的新行

    我更喜欢奥尔曼式 http en wikipedia org wiki Brace style Allman style大括号 例如 if foo magical prancing unicorn stuff 而不是 if foo unma

随机推荐