【问题标题】:Does adding unnecessary curly brackets { } in a c++ program slow it down at all?在 C++ 程序中添加不必要的大括号 { } 会减慢它的速度吗?
【发布时间】:2014-04-18 00:02:32
【问题描述】:

这可能是一个愚蠢的问题,但我是 C++ 和一般编程的新手,我在这里找不到答案。我知道在 C++ 中,{ } 在某些情况下是可选的。例如,如果您有一个只执行一个操作的简单 if 语句,则不需要用 { } 括起来。

我只是想知道额外的括号是否对程序的速度有任何影响(即使是最小的)。我问的原因是因为我总是在我的所有语句中包含大括号,即使不是必需的,只是因为我喜欢屏蔽我的代码。

我个人的喜好是:

   if (foo)
   {
        bar;
   }

而不是简单的

   if (foo)
       bar;

我只是喜欢它在阅读代码时的样子。但是,如果这实际上对代码的速度有影响,那可能不是一个好主意。有谁知道额外的括号是否会影响速度?谢谢。

【问题讨论】:

  • 查看这篇文章以获得好的答案...stackoverflow.com/questions/3568503/…
  • 这个问题表明严重缺乏对 c++ 是什么的理解。
  • @shoosh 你能详细说明一下吗?正如我所说,我对此很陌生。所以是的,显然我对“c++ 是什么”缺乏一些了解。
  • @Sabien 这个问题表明您认为您编写的实际文本代码是在程序运行时被读取的。尽管(某些)解释型语言就是这种情况,但对于作为一种编译语言的 c++ 来说,情况与现实相去甚远。如果您意识到 c++ 已编译,我不明白您怎么会认为这种不会以任何方式改变程序含义的语法差异会在运行时产生任何影响。
  • @Sabien 计算机上的所有内容都存储为 1 和 0。重要的是那些位的含义。当您只是编写代码并使用编辑器将其保存为 .cpp 文件时,位的含义就是您编写的文本。当您编译代码时,编译器会获取此文本,将其转换为汇编代码并将汇编的二进制编码写入 .exe 文件。这里有更多:en.wikipedia.org/wiki/Compiler

标签: c++


【解决方案1】:

不,它没有。
一般来说,由于“as if”规则,编译器有很大的余地来优化。

不过,这是一个风格问题,而且很少有直截了当的答案让所有人都同意。

有些人只在显着阐明代码或有必要时才使用任何形式的大括号,而有些人总是将代码块用于条件和循环。
如果您在团队中/在合同中/在继承的代码库中工作,请尝试遵循他们的风格,即使它不是您的。

【讨论】:

  • 我认识的大多数人都同意总是使用括号更好
  • @Julius 这是一个风格问题。有很多优秀的程序员会做,也有很多不会。
  • re “不,它没有”,原则上可以取决于执行环境。有一些C++ intepreters。我不知道他们中是否有人解释原始源代码文本,但认为解释器的存在意味着至少存在一个非常低效的解释器并不是那么牵强... ;-)
【解决方案2】:

编译器的结果相同。就像初始化这样的变量:

int a = 0;
int a {0};
int a (0);

也有相同的结果。这是风格问题。

【讨论】:

  • 公平地说,如果你改变a的类型,那些陈述可能会有很大的不同。
  • 会有什么变化
  • 假设astd::vector<int>。由于适当的转换构造函数是显式的,第一个不会编译。第二个将其初始化为一个 0。第三个将其初始化为 0(空)的大小。
【解决方案3】:

花括号可以帮助编译器确定变量、条件、函数声明等的范围。一旦代码被编译成可执行文件,它就不会影响运行时性能。大括号使代码更易于维护

它有助于更​​轻松地调试代码,想象下面的代码 sn-p,您需要通过放置断点来评估 do_some_operation。第二个选项将更好地服务于目的

if( some_condition ) { do_some_operation; }
--------------------------
if( some_condition )
{
    do_some_operation;
}

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2011-04-21
    • 1970-01-01
    • 2012-08-27
    • 1970-01-01
    • 2023-04-03
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多