【问题标题】:Is passing a bool by value guaranteed to be efficient?按值传递布尔值是否保证有效?
【发布时间】:2017-05-13 20:50:31
【问题描述】:

如果sizeof(bool) == 1 则按值传递是有效的,因为bool 适合寄存器(假设一些标准调用约定)。但是sizeof(bool) 是实现定义的。那么bool 在通过值而不是通过引用传递时总是保证效率更高吗? sizeof(bool) 的上限是否有任何保证?

【问题讨论】:

  • 定义“高效”。当您传递引用时,您必须花时间在使用时取消引用它。
  • @aryamccarthy 是的,这就是我要说的。按值传递不涉及取消引用。所以效率更高。
  • @freakish, @πάνταῥεῖ 表示 C 没有引用或原始 bool 类型。我已经提交了修改。
  • 如果您将布尔值传递给函数,您的设计可能存在一些问题,我会担心哪个更“高效”,在不太可能的情况下它对您很重要,您应该通过基准测试和分析进行调查。
  • 我们都同意 1234 字节的布尔值是一个非常愚蠢的平台设计。我怀疑你会在野外看到类似的东西。除此之外,分析将告诉您如何权衡取舍。

标签: c++ boolean


【解决方案1】:

C++ 和 C 标准并非旨在保护您免受恶意恶意实施的侵害。

就这么简单。您必须相信您的实现不会尝试变坏。如果是这样,请不要使用它。

对于这种特定情况:任何使复制内置整数类型变得昂贵的实现,即使在技术上符合要求,也会破坏大量现实世界代码的性能,因此可能被视为恶意不良。

所以要明确回答:不,标准不保证,因为这超出了他们的范围。但是,它受到现实世界约束的保证。

【讨论】:

  • 我不担心。我只是好奇。
  • 正如我所说,您需要信任您的实现。如果它试图伤害你,那么一切都会失败,在这里和其他场合。
猜你喜欢
  • 2017-01-14
  • 2010-12-02
  • 1970-01-01
  • 2014-04-13
  • 1970-01-01
  • 1970-01-01
  • 2014-05-28
  • 2023-04-02
  • 2021-11-24
相关资源
最近更新 更多