【发布时间】:2015-05-18 07:39:50
【问题描述】:
我是 C++ 新手,仍处于学习阶段,所以这对您来说可能是一个简单且可能愚蠢的问题;(
从板上的其他问题和答案中,我了解到在 cpp 文件中初始化私有静态类数据成员以及其他成员函数定义是习惯和首选。
但是,是否可以将成员函数初始化为 main.cpp 中的全局变量?既然所有对象都应该共享一个静态数据成员,为什么不在那里初始化它呢? (我会认为在 main 本身初始化它,但我猜这会吐出编译错误)
您能否解释一下这在技术上是不合理的还是只是没有按照惯例进行。由于静态数据成员无论如何都在类 cpp 文件中初始化为全局变量,所以我看不出在主 cpp 中初始化它会失败的原因。请指教。
【问题讨论】:
-
需要在类外初始化:learncpp.com/cpp-tutorial/811-static-member-variables
int Something::s_nValue = 1; -
在使用静态成员之前要三思,除非它们是 const。您可能遇到的陷阱包括 SIOF 和竞态条件。后者仅适用于您或其他人想要与您的班级并行做事时。
-
对静态的处理,特别是用于单例习语的函数静态变量和其他静态,在 C++11 中得到了改进。以前,您基本上需要自己对所有内容进行互斥保护,现在编译器可以帮助您。参见例如stackoverflow.com/questions/11711920/…