在阅读Oliveira和Stewart的书籍《编写科学软件》时,我发现了这个有趣的段落:
“共享变量很危险,在共享库中应该避免使用静态或保存的局部变量以及全局变量。”
(第55页)
但是,静态成员函数呢?在共享库中,它们是否同样危险?我也应该避免使用它们吗?为什么/为什么不?
“共享变量很危险,在共享库中应该避免使用静态或保存的局部变量以及全局变量。”
(第55页)
但是,静态成员函数呢?在共享库中,它们是否同样危险?我也应该避免使用它们吗?为什么/为什么不?
静态函数并不是问题。实际上,许多在科学软件中常用的函数都是纯数学函数,例如sin()
、sqrt()
、log()
。
另一方面,静态变量是共享状态的指示器,应该避免使用。
并非固有的。一个不使用任何静态状态(例如仅使用本地或线程本地变量的函数)的静态成员函数是安全的。这样的方法经常在备受尊重的库中使用,例如boost或guava(最后一个例子来自Java世界)。