C/C++——为什么类的静态成员函数在定义的时候不写static?
2017-05-23 09:51
423 查看
解释一:
举个例子,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++使用pthread_create()的时候,类成员函数做线程的处理函数必须要定义成static类型的?
- 为什么在C++使用pthread_create()的时候,类成员函数做线程的处理函数必须要定义成static类型的?
- 在c++中,静态数据成员可以被非静态成员函数调用吗?如果可以调用的话那为什么还要定义静态成员函数呢
- 【c++】为什么类中静态(static)成员不能在类的定义内初始化?
- C++之静态成员函数为什么不能为虚函数
- C++里的静态成员函数(不能用const的原因+static在c++中的第五种含义)(转)
- C++使用static的错误:无法解析的外部符号、“static”不应在文件范围内定义的成员函数上使用
- C++ 类的 静态成员 (static) 静态成员函数 Static
- C++为什么要引入静态成员函数
- C++类内为什么不能定义非const的static成员(待续)
- C++实例 静态成员的引入——静态数据成员的定义、调用,静态成员函数的实现、调用。
- C++使用static的错误:无法解析的外部符号、“static”不应在文件范围内定义的成员函数上使用 .
- C++静态成员和静态成员函数static
- c++静态成员函数与线程同步(static member functions and thread-safety)
- c++静态成员函数为什么不能为虚函数?
- static(c++)静态数据成员和静态成员函数
- C++里的静态成员函数(不能用const的原因+static在c++中的第五种含义)
- 静态函数 静态数据成员与静态成员函数 为什么虚函数必须是非静态成员函数 构造函数能为static吗?
- 为什么C++中,线程控制函数往往是静态成员函数?【转】
- 为什么C++静态成员函数不能访问非静态成员变量、不能调用非静态成员函数?(面试常考)