创建一个所有成员(属性,函数)都是静态的类的(目标)缺点是什么?特别是与命名空间的使用相比?或者您更愿意创建全局变量/函数?
我喜欢创建静态属性,因为我发现它们"更整洁".(我确切地知道它们来自哪里等等)我对命名空间不是很熟悉.而且我不舒服,在所有的全局变量,因为我不是很熟悉C语言的关键字,例如extern和static.
此外,如果我们考虑班级
class MyStaticClass
{
private:
static int x;
static double y;
public:
static float s;
static double weatherForecast(unsigned int, char);
};
Run Code Online (Sandbox Code Playgroud)
和命名空间
namespace MyNamespace
{
int x;
double y;
float s;
double weatherForecast(unsigned int, char);
}
Run Code Online (Sandbox Code Playgroud)
在通话MyStaticClass::weatherForecast和通话之间是否存在差异(性能方面)MyNamespace::weatherForecast?
阅读/写作MyStaticClass::s和阅读/写作之间是否存在差异(表现方面)MyNamespace::s?
如果使用类而不是主要类型,上述问题的任何答案都会改变吗?
创建一个所有成员(属性,函数)都是静态的类是"好习惯"吗?
这被称为"单独",它取决于.
或者您更愿意创建名称空间?
具有静态函数的类可以是模板参数,而命名空间则不能.另一方面,名称空间允许依赖于参数的查找,而类 - 则不那么.
或者您更愿意创建全局变量/函数?
有些东西是真正的全局,比如标准流,Logger对象,事件循环引擎(特定于线程的全局).例如,在每次调用中传递Logger对象或将它们存储为成员变量的代码比IMO更复杂.
经常被引用的误解是,翻译单元的动态初始化顺序是未定义的,因此人们过度使用单例而不是普通全局变量来确保Singleton对象在首次使用之前被初始化.然而,有一种称为Schwarz Counter的便携式技术,用于初始化标准流(std::cout和朋友),这确保这些全局变量在首次使用之前即使在main输入之前也被初始化.
您更新的问题的答案:不,不,不.
| 归档时间: |
|
| 查看次数: |
879 次 |
| 最近记录: |