类的静态成员变量和类的“主体”中定义的“自由”变量有什么区别?我的意思是,我可以用第二个代替第一个来释放类的头吗?
// b.h
class B
{
public:
B(int j);
void print();
private:
static int is;
};
//b.cpp
#include <iostream>
int i = 0;
int B::is = 0;
B::B(int j)
{
i = j;
is = j;
}
void B::print(){
std::cout << i << " " << is << " " << std::endl;
}
//main.cpp
int main() {
B b1(1);
b1.print();
B b2(2);
b2.print();
b1.print();
return 0;
}
输出:
1 1
2 2
2 2
发布于 2012-03-13 18:12:21
在您的示例中,不同之处在于静态成员数据只能由类访问,因为它是在类的private
部分中声明的,这在某些情况下可能是可取的。全局i
可以由任何人更改。
因此,如果变量仅用于类,并且不应该被其他类使用,那么在private
部分中使用静态成员数据是更好的解决方案。它为您提供了对变量的受限访问权限。全局变量通常是不好的,因为它让任何人都可以不受限制地访问。
请注意,在您的示例中,全局变量i
具有外部链接。在其他文件中,可以简单地声明为extern int i
,然后可以使用i
并对其进行修改。
即使您将其设置为static
全局变量,以使其具有内部链接,但与static
成员数据相比,它也不是很好,因为静态成员数据给您提供了某种概念,即该变量仅由类使用,而不是由非类成员使用(如果在同一文件中有的话)。因此,与全局static
数据相比,static
成员数据提高了可读性。
https://stackoverflow.com/questions/9689605
复制相似问题