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()的实现,但是他们互相看不见对方的实现,所以链接的时候就不会出现不知道该去找哪一个实现的问题了.
c++中static的使用的更多相关文章
- C++中static数据成员详解
本文和大家分享的主要是c++中static数据成员的相关用法及源码示例,希望能帮助大家更好的学习C++. static(静态存储)数据成员 StaticTest.cpp : 定义控制台应用程序 ...
- php面向对象中static静态属性和静态方法的调用
这篇文章主要介绍了php面向对象中static静态属性和静态方法的调用,实例分析了static静态属性和静态方法的原理与调用技巧,需要的朋友可以参考下 本文实例讲述了php中static静态属性和静态 ...
- c++ 类与函数中static变量初始化问题(转)
首先static变量只有一次初始化,不管在类中还是在函数中..有这样一个函数: void Foo() { ; // initialize std::cout << a; a++; } 里的 ...
- c & c++中static的总结
static 修饰的三种作用 (1) 静态局部变量 (2) 模块内的全局变量.函数,不可以被其他模块访问 (3) 类的静态成员 其中(3)只在c++中有. (1) 静态局部变量.局部变量一般在函数体内 ...
- java中static关键字解析
static关键字是很多朋友在编写代码和阅读代码时碰到的比较难以理解的一个关键字,也是各大公司的面试官喜欢在面试时问到的知识点之一.下面就先讲述一下static关键字的用法和平常容易误解的地方,最后列 ...
- java中static关键字的作用
java中static关键字主要有两种作用: 第一:为某特定数据类型或对象分配单一的存储空间,而与创建对象的个数无关. 第二,实现某个方法或属性与类而不是对象关联在一起 简单来说,在Java语言中,s ...
- C/C++中static关键字的用法
1.什么是static? static 是C/C++中很常用的修饰符,它被用来控制变量的存储方式和可见性. 1.1static的引入 我们知道在函数内部定义的变量,当程序执行到它的定义处时,编译器为它 ...
- C/C++中static的用法全局变量与局部变量
1.什么是static? static 是C/C++中很常用的修饰符,它被用来控制变量的存储方式和可见性. 1.1static的引入 我们知道在函数内部定义的变量,当程序执行到它的定义处时,编译器为它 ...
- PHP面向对象中 static:: 与 self:: parent:: $this-> 的区别
很多好几年工作经验的PHP工程师,对PHP面向对象中 static:: .self::.parent::.$this-> 的定义和使用都不清晰,特做详细梳理: static:: 可以访问全局作 ...
- php中static 静态关键字
一直依赖对于php中static关键字比较模糊,只是在单例模式中用过几次.上网查了查,没有找到很全的介绍,自己总结一下. 根据使用位置分为两部分 1.函数体中的静态变量 2.类中的静态属性和方法 1 ...
随机推荐
- PHP防止SQL注入的方法
[一.在服务器端配置] 安全,PHP代码编写是一方面,PHP的配置更是非常关键. 我们php手手工安装的,php的默认配置文件在 /usr/local/apache2/conf/php.ini,我们最 ...
- delphi if 语句循环语句
if语句------------------------------------------------------------------------------------------------ ...
- 从别人写的 Object-C 中 Singleton (单例) 模式 中的一些理解--备
关于 面向对象的设计模式 对于面向对象的设计模式,想必大家并不陌生吧. 纵观23种设计模式中,数单例模式(Singleton)和工厂模式(Factory Method)最为熟悉和基础吧.当然,本文总结 ...
- 利用FbinstTool+大白菜u盘工具,制作多系统启动U盘【转】
一般制作多系统启动盘的教程都会要用到rub4dos+grubinst+ultraiso+msgdiyerl等等工具,一大串的工具列表让人望而生畏.其实大白菜里已经对这些工具做了非常好的封装,利用大白菜 ...
- Android使用百度地图定位
下面事例是使用Android平台的部分代码.对于这个平台百度的开放人员已经写了完整的demo,把工程导入到eclipse中之后一般没有错误,如果报错的话,eclipse也会给出提示.一般可以通过将pr ...
- AltiumDesigner14板框定义及3D显示图文教程
很多人都跟我反应说AD14不能定义板框大小,或者说是不知道怎么定义板框的大小,确实AD14的操作和AD13或者是AD10的版本斗有一些差异,尤其是现在最新的版本AltiumDesigner14.3.1 ...
- Mono Compatibility
The easiest way to describe what Mono currently supports is:Everything in .NET 4.5 except WPF, WWF, ...
- FILTER的执行次数和驱动表问题
drop table test1; create table test1 as select * from dba_objects where rownum<1000; drop table t ...
- HDOJ 1202 The calculation of GPA
Problem Description 每学期的期末,大家都会忙于计算自己的平均成绩,这个成绩对于评奖学金是直接有关的.国外大学都是计算GPA(grade point average) 又称GPR(g ...
- IOS-UITableView开发常用各种方法总结
实现列表有两种方式 方式一 继承UIViewController,实现UITableViewDataSource和UITableViewDelegate协议.声明UITableView. UserIn ...