在第4项(Effective C ++ 3rd Ed。中的第30/31页)中,提供了以下代码示例:
翻译单位1:
buttons[i]=new Button(this);
buttons.setId(i);
buttons[i].setOnClickListener(new View.OnclickListener()
{
@Override
public void onClick(View view){
buttons[view.getId()].setBackgroundColor(color);
}
};
翻译单元2:
class FileSystem {
public:
...
std::size_t numDisks() const;
...
};
extern FileSystem tfs;
现在迈耶斯将class Directory {
public:
Directory( params );
...
};
Directory::Directory( params )
{
...
std::size_t disks = tfs.numDisks();
...
}
Directory tempDir( params );
称为静态对象。 (第31页,第2段)
但
tempDir
和tfs
是由{。}创建的 不同的人在不同的时间在不同的源文件 - 他们是 在不同的翻译单元中定义的非本地静态对象。
显然tempDir
是静态的,因为它是用extern声明的,但为什么hack应该tfs
是静态的?
答案 0 :(得分:4)
static
在C ++中也有很多含义。这意味着tempDir
在静态数据区域中定义,在任何函数之外。
它不是动态分配的,也不是本地自动存储变量。