在阅读 Oliveira 和 Stewart 的《Writing Scientific Software》一书时,我看到了这段有趣的段落:
"共享变量是危险的,应该在共享库中避免
因此,如果您正在编写共享或动态链接库,请避免使用
static
局部saved
变量并避免使用全局变量。”(第 55 页)
但是static
成员函数呢?这些在共享库中是否同样危险?我也应该避免这些吗?为什么/为什么不?
在阅读 Oliveira 和 Stewart 的《Writing Scientific Software》一书时,我看到了这段有趣的段落:
"共享变量是危险的,应该在共享库中避免
因此,如果您正在编写共享或动态链接库,请避免使用
static
局部saved
变量并避免使用全局变量。”(第 55 页)
但是static
成员函数呢?这些在共享库中是否同样危险?我也应该避免这些吗?为什么/为什么不?
但是
static
成员函数呢?这些在共享库中是否同样危险?
一点也不:static
不应该避免成员函数:与static
表示共享状态的变量不同,static
成员函数表示共享计算。只要这些计算是无状态的,它们就完全没有危险。
静态函数不是问题。事实上,科学软件中常用的许多函数都是纯数学函数,例如sin()
, sqrt()
, log()
.
另一方面,静态变量是共享状态的指标,应该避免使用。
不是天生的。不使用任何静态状态的静态成员函数(例如,仅使用局部变量或线程局部变量的成员函数)并不是不安全的。此类方法经常用于备受推崇的库中,例如 boost 或 guava(Java 世界的最后一个示例)。