C/C++——为什么类的静态成员函数在定义的时候不写static?
解释一:
举个例子,Base是一个类,data是他的int型static数据成员,那么我们这么定义:
int Base::data = 10;
1、因为使用static数据成员时,都是Base::data
。。。。这么来用的,编译器知道data是在类Base的作用域内,它会去查看data在类中是怎么生命的,所以在定义处加static是没有必要的;
2、那如果加上static,也就是:
static int Base::data = 10;
这样的话,static并不在类的作用域内(并不在Base::后面),所以就得把static做一般解释了,那就是定义一个全局静态变量,也就是在其他源文件中是不能使用的。试想,如果类的定义是在某个头文件中,而这个定义又在另一个文件中,那让编译器情何以堪啊!
解释二:
静态成员 是 类成员
它和 对象成员(类的示例成员)差别之处在于当我实例化多个类的对象时, 这些对象共用这一个类的静态成员。不过前提是你要先定义这个静态成员。
class Task {public:
private:static int n;
}
这只是声明了一个静态成员 ,但还没定义。
声明时需要告诉编译器这是什么类型, 但定义时, 编译器会自己找声明
C++中有很多类似语法:
比如, 默认参数列表, 是声明的时候加默认参数, 定义函数的时候不需要;
定义inline函数也是声明的时候加inline, 定义的时候不加
C/C++——为什么类的静态成员函数在定义的时候不写static?相关推荐
- 在全局中调用类的静态成员函数
在全局中直接调用类的静态成函数会产生重复声明错误. 例如: FooClass::FooStaticFunction(); 如果在全局中间接调用类的静态成员函数则不会产生错误,但是会产生多余的全局变量. ...
- 【C++面向对象】类的静态成员函数(static member functions)
一.静态成员函数的引入 在引入静态成员函数之前,C++语言要求所有的成员函数都必须经由该类的对象来调用.而实际上,只有当成员函数中有存取非静态数据成员时才需要类对象.类对象提供this指针给这种函数使 ...
- 类的静态成员函数和静态成员变量的使用
当将类的某个数据成员声明为static时,该静态数据成员只能被定义一次,而且要被同类的所有对象共享.各个对象都拥有类中每一个普通数据成员的副本,但静态数据成员只有一个实例存在,与定义了多少类对象无关. ...
- 类的静态成员函数带来了什么好处,应该在什么时候使用?
函数的行为对所有派生类都一致时,可以声明为静态. 静态成员函数的作用基本上相当于一个带有命名空间的全局函数. 如一个数学类定义了一些函数 都可以声明伪静态的 Math.sin(x)等 好处很多,但所有 ...
- 类的静态成员函数和静态数据成员
一.静态数据成员 1.定义: 静态数据成员就是给类的普通数据成员加上关键字static. 2.访问规则 静态数据成员也遵守public/protected/private访问规则 访问静态成员时,则可 ...
- 类和对象—对象特性—静态成员函数
静态成员函数 所有对象共享同一个静态成员函数 静态成员函数只能访问静态成员变量 #include <iostream> using namespace std;class Person{p ...
- oc 协议 回调 静态成员_每日一问:c++类的成员函数,能作为线程的参数吗?
问:类的成员函数可以传入线程参数吗? 回答: 如果c语言的全局函数,可以. 如果是类的静态成员函数,可以 如果是类的普通成员函数,不可以 为什么? <深入探索C++对象模型>中提到成员函数 ...
- 类的静态成员与静态成员函数
静态成员 即定义出一些成员与类本身直接相关,而不是与类的各个对象保持关联. 1,声明静态成员 在成员的声明之前加上关键字static使得其与类关联在一起 class Test { public: ...
- C++ 类的静态成员及静态成员函数
https://www.cnblogs.com/codingmengmeng/p/5906282.html C++ 类的静态成员及静态成员函数 对象与对象之间的成员变量是相互独立的.要想共用数据,则需 ...
最新文章
- Python3 调试技巧 —— 死循环
- 连接被远程计算机621,拨号上网常见错误代码提示及解决方法
- word List 08
- 顺序表(代码、分析、汇编)
- 总结一些最优化算法(ADMM/FISTA)代码网站
- 【SQL】分析函数功能-排序
- 如何计算两向量的夹角
- 3D计算机组装,3DMax电脑组装配置
- SMARTDRV.EXE下载和安装说明
- 队列:实用服务和数据结构
- 腾讯2020校园招聘笔试题解
- deepin改无盘服务器,UbuntuDeepin系统上搭建nfs服务器
- Python函数返回多个值的方法
- vue3 使用element表格导出excel表格(带图片)
- 计算机维修分为那两种,计算机二级维修中最常见的三种方法是什么?
- 简述PCM 30/32帧结构图
- 基于HTML+JavaScript+CSS计算机实验室预约管理系统网页设计 文档+html源码
- [论文阅读] 基于辅助函数的IVA(使用源先验的四阶关系)
- ffmpeg锐化算法
- 软件测试之测试主流技能
热门文章
- oracle数据表空间与数据文件,oracle 操作表空间和数据文件
- python循环练习_Python循环练习
- python语言中包含的标准数据类型_Python标准数据类型
- fig,ax = plt.subplots()
- [线性代数] 对网络上一篇讲解特征值分解的物理意义的文章的批注
- Matconvnet 学习笔记
- python可以进行矩阵运算吗_python能做MATLAB等价的矩阵运算吗?
- 在新版本caffe里添加新的一层(向旧格式中加)
- 百度BCC云解析配置(新旧文档对比) - (文档篇)
- rnn按时间展开_一文搞懂RNN(循环神经网络)基础篇