【问题标题】:Will this declaration of local variables atually repeat many times? [duplicate]这种局部变量的声明实际上会重复很多次吗? [复制]
【发布时间】:2016-10-06 16:22:31
【问题描述】:

我听说我们应该使变量尽可能本地化,我同意。考虑这段代码:

int main()  {
    for(int i = 0; i<5; ++i)    {
        int temp;
        std::cin >> temp;
        std::cout << temp << std::endl;
    }
    return 0
}

tempfor 循环的局部变量。但是,我担心在每个循环中都声明了temp,因此会使程序运行得更慢。避免这种情况并在for 循环之外声明temp 会更好吗?

int main()  {
    int temp;
    for(int i = 0; i<5; ++i)    {
        std::cin >> temp;
        std::cout << temp << std::endl;
    }
    return 0
}

【问题讨论】:

  • 这对速度没有任何影响,只是在后一种情况下您将temp 放在堆栈上的时间更长。我更喜欢第一个。
  • 如果它更慢,谁会发声?使用 C++ 会使您的程序变慢,您应该编写手动调整的程序集!
  • @GManNickG 这是我个人的理解,我认为多走一步 declaration 会使程序运行更慢。
  • 这个问题最好用基准来回答。
  • @buzhidao:我开玩笑的。您应该关注可读性而不是性能。即使这个变量位置让事情变得更慢,它也让事情更容易阅读,所以它是值得的。你的程序不需要尽可能快,它只需要足够快。在您的程序不够快后,使用分析器找出它慢的地方。保证不在这条线上。

标签: c++ variables


【解决方案1】:

这对速度没有任何影响,只是在后一种情况下您将temp 放在堆栈上的时间更长。

我更喜欢第一个,因为尽可能最小化变量的范围是一个好习惯。

【讨论】:

  • 但是每次都会声明 temp 吗?
  • @buzhidao:是的,语义上
  • @buzhidao:找到了一个duplicate,用其他方式解释。看看他们。
  • 谢谢,我以前避免像第一个那样编码,现在我知道这样做是可以的。
【解决方案2】:

首先,总是先写清楚,再写速度。其次,在您有测量结果表明它有帮助之前,不要将速度的清晰度包含在内。

声明变量是在编译时发生的事情。运行时发生的是初始化,是的,如果你在循环中声明temp,它会在每次循环中被初始化。如果 temp 的初始化成本很高,这可能很重要。然而,在没有初始化器的 int 的情况下,成本是;该值是不确定的。

【讨论】:

  • @krzaq:为什么不“但是在没有初始化器的 int 的情况下,成本为零;该值是不确定的。”盖那个? (实际上,没有什么可以阻止编译器将默认初始化的聚合初始化为某个众所周知的值。)
  • 确实如此。只能怪累了,抱歉。
  • 呸!我的第一个假设总是我的答案不清楚。
  • 好吧,如果我要挑剔任何东西,那就是总是。当然,您可以不惜一切代价想出一个必须尽可能快的热代码示例;)
【解决方案3】:

这真的是个人喜好问题。在 for 循环中声明 temp 不会影响速度。

【讨论】:

    猜你喜欢
    • 2018-11-23
    • 1970-01-01
    • 1970-01-01
    • 2023-03-05
    • 1970-01-01
    • 2017-12-22
    • 1970-01-01
    • 1970-01-01
    • 2014-01-21
    相关资源
    最近更新 更多