【问题标题】:With regard to memory allocation, how (or where) should I declare the following variables? [duplicate]关于内存分配,我应该如何(或在哪里)声明以下变量? [复制]
【发布时间】:2013-12-19 12:48:02
【问题描述】:

我不确定在这里问这个是否合适。我担心内存分配,我不知道在哪里阅读。

我正在与自己争论是否应该为每个寻根函数声明局部变量,或者只使用每个函数每次调用都可以重用的全局变量。请注意,我不打算在这里使用递归。仅 (do-)while (或 for) 循环。

如果我也能得到足够的解释,我将不胜感激。

// [1]
// global(?) variables
// functions.cpp

#include <cmath>
#include "functions.h"

using namespace std;

double guess1;     // upper
double guess2;     // lower
double root;
double prevGuess;
double sigFigs;
double minSigFigs;

double newt_rhap(params)
{
   // do stuff
}
double bisection(params)
{
   // do stuff
}

================

// [2]
// local variables
// functions.cpp

#include <cmath>
#include "functions.h"

using namespace std;


double newt_rhap(x,y,z,f(),f_prime())
{
   double guess = x;
   double sigFigs = y;
   double minSigFigs = z;

   // do stuff
}
double false_position(w,x,y,z,a())
{
   double xr;
   double upper = w;
   double lower = x;
   double xprev;
   double fxr;
   double fxu;
   double fxl;
   double sigFigs = y;
   double minSigFigs = z;

   // do stuff
}

【问题讨论】:

  • 不要使用全局变量...这很愚蠢。在每个函数中声明变量。
  • 会不会是个大问题?
  • No.... 如果你使用全局变量会更成问题
  • 我建议明确地使您的函数指针参数成为实际指针。这是绝大多数人习惯看到的(如果“数组”也发生这种情况)。
  • @solitude,不,它们在用作参数时被编译器解释为函数指针,但正如我所说,几乎每个人都明确指出它们。

标签: c++


【解决方案1】:

当您希望在多个函数之间共享变量的值并希望避免在函数之间传递值时,您应该使用全局变量。

在其他情况下,最好使用局部变量。使用全局变量,您需要确保该值没有在某处被意外修改。

此外,您可能需要在使用前经常重新初始化这些值。

【讨论】:

    【解决方案2】:

    始终尽量避免使用全局变量,除非您需要一些通用的特定变量/值或在其他函数中也可以访问。因为通过将全局变量声明为当您的程序变得越来越大时,您将面临调试困难,那就是您的全局变量在哪个特定函数上得到错误的值。就像你期待 10 但它给了 20 然后你就可以坐下来调试哪个函数可以做到这一点。这就是为什么类 Java 语言本身不允许全局变量概念的原因。

    【讨论】:

    【解决方案3】:

    除非你知道变量值对于你定义的所有函数都是相同的,否则不要使用全局。但最好避免使用全局变量。

    【讨论】:

    • 我计划为每个函数调用赋予不同的值。全局变量是否应该是不变的/静态的?
    • 如果是不变的值,它是可重复使用的。如果您有(例如使用该值的 20 个函数),则无需一次又一次地声明它。对不变的值使用常量,这样会更好,这样您就不会意外更改它的值。
    • 一般来说,最好避免使用全局变量,除非你有非常好的理由
    猜你喜欢
    • 1970-01-01
    • 2012-06-11
    • 1970-01-01
    • 2017-05-14
    • 1970-01-01
    • 2011-10-18
    • 2014-08-27
    • 2016-02-07
    • 2015-01-22
    相关资源
    最近更新 更多