【发布时间】:2012-08-23 11:46:47
【问题描述】:
我很久以前就知道,唯一可靠的方法是在函数中初始化静态成员。现在,我要做的是开始通过非常量引用返回静态数据,我需要有人阻止我。
function int& dataSlot()
{
static int dataMember = 0;
return dataMember;
}
据我所知,这是确保静态成员初始化为零的唯一方法。但是,它会创建像这样的晦涩代码:
dataSlot() = 7; // perfectly normal?
另一种方法是将定义放在翻译单元中,并将内容放在头文件之外。我对此本身没有任何反对意见,但我不知道标准所说的什么时候以及在什么情况下是安全的。
我最不想做的事情是意外访问未初始化的数据并失去对我的程序的控制。
【问题讨论】:
-
为什么需要返回非常量引用?
-
@Andrey 我有一个用例,我实际上希望能够修改静态值,但我也希望它具有特定的默认值。
-
dataSlot()=7这样的代码是完全正常的。 -
如果您觉得这个问题超出了您的想象,我很抱歉@Mankarse
-
@JohnLeidegren:我没有看到任何问号,我也不觉得
dataSlot() = 7晦涩难懂。我当然认为不可能对“我需要有人阻止我”给出明确的事实答案。
标签: c++