c++中static的使用

static可以用来修饰变量,包括函数的局部变量,类的成员变量.可以用来修饰函数,包括类的成员函数,普通函数.

今天就只说说static修饰类之外的函数的情况.假设你写了一个head.h,一个a.cpp,一个b.cpp,head.h中定义了一个函数f()(注意:是定义不是声明,就是说你把f()的实现直接写在了head.h里),a.cpp和b.cpp中引用了head.h。那么编译的时候是不会有问题的,但是a.cpp和b.cpp在编译的时候生成的.o文件里都会包含f()的实现,在链接的时候就会出现类似于”f()重定义”这样的错误.

要怎么解决呢?
1.head.h里就只做声明,把定义放到head.cpp里做。这样a.cpp和b.cpp编译完的.o文件就只含有f()的位置信息,而不含有f()的具体实现,这样链接的时候自然就只有一份f()的实现可找,就不会有”f()重定义的问题了”

2.如果就想在head.h里直接就把f()定义也给实现了,不想再单独弄个head.cpp了。那么你需要在f()前加上static关键字.static关键字告诉编译器,f()这个函数只在当前文件可见。所以编译a.cpp和b.cpp的时候生成的.o文件虽然仍然都含有f()的实现,但是他们互相看不见对方的实现,所以链接的时候就不会出现不知道该去找哪一个实现的问题了.

posted @ 2014-07-15 15:04  core!  阅读(222)  评论(0编辑  收藏  举报