c++ - 为什么使用静态 "constants"而不是实际值?

标签 c++ c

<分区>

我正在查看最小二乘法的代码,我遇到了以下几行:

static double one = 1.0;
static double p1 = 0.1;
static double p5 = 0.5;
...

我想知道为什么有人会为 1.0 定义一个 static。例如,我可以理解 pi 有一些东西,但是对于 1.00.1 等微不足道的数学值?我认为这会降低代码的可读性,但它可能还有一些我遗漏的其他好处。

那么,这些定义有原因吗?或者,如果它没有与现代代码一起使用,那么旧编译器是否有任何原因?我知道我正在查看的代码已从 FORTRAN 翻译成 C/C++。在 FORTRAN 中有什么原因吗?

最佳答案

I know that the code that I'm looking at was translated to C/C++ from FORTRAN. Were there any reasons for this in FORTRAN?

FORTRAN 对所有子例程参数都使用按引用传递。但是,与其他具有按引用传递的语言不同,它仍然允许您将“右值”作为参数传递。在幕后,FORTRAN 编译器将代码转换为:

CALL SUBFOO(X + Y, 4)

像这样编码

TEMP1 = X + Y
TEMP2 = 4
CALL SUBFOO(TEMP1, TEMP2)

这正是您的 C++ 代码正在做的事情:创建变量以将指针(或引用)传递给 FORTRAN 样式的子例程。

当然,这不是惯用的 C 或 C++。通常,您会按值传递 double

(从我对 this question 的回答中复制的代码示例。)

关于c++ - 为什么使用静态 "constants"而不是实际值?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/41400363/

相关文章:

c++ - 为什么我的 for 循环永远不会结束?

python - OpenGL 中的 GL_R8 和 GL_R8UI 是否不同?

c - Json 文件不适用于 Visual Studio 代码中的 C 程序

c - 我的编译器不支持透明 union 。我该如何解决这个问题?

c# - 使用带有 c dll 的后台工作程序

c++ - 头文件中未定义方法和纯虚方法的区别

c++ - Cassandra datastax cpp 驱动程序 - 避免不必要的拷贝

c++ - 什么是 C++ GUI 库支持 Windows 的 32 位字符 Unicode

c - 指向函数转换的指针

C - 缓冲区溢出详细信息