【c++】为什么类中静态(static)成员不能在类的定义内初始化?
来源:互联网 发布:校园网络需求验证 编辑:程序博客网 时间:2024/05/17 07:23
先看一段代码:
#include <iostream>using std::cout;//classclass loopsaker{public:static int a=1; // 错误!loopsaker();};int main(int argc, char const *argv[]){cout<<loopsaker::a;return 0;}
这里的错误在于,不能在class的定义里面初始化a。
来看下对的:
#include <iostream>using std::cout;//classclass loopsaker{public:static int a;// 这里只是声明loopsaker();};int loopsaker::a=1;//这里是定义int main(int argc, char const *argv[]){cout<<loopsaker::a;return 0;}
为什么,static 的变量,不能在类的里面定义呢?
1.
首先,我们需要回顾一下C++里面,关于linkage和separate compilation最重要的一条rule:
one definition rule!
https://en.wikipedia.org/wiki/One_Definition_Rule
这里面的其中一条就是,一个object,在所有的translation units中,一共只能出现一次定义。
2.
然后,再想想class的定义我们一般放在哪里。
放在头文件里面。
如果static variables的定义是放在class的定义里面的。
多个不同的文件include了这个header,会导致好几个不同的translation unit都定义了同一个object loopsaker::a;
ref: http://stackoverflow.com/questions/4547660/c-static-member-variable-and-its-initialization
0 0
- 【c++】为什么类中静态(static)成员不能在类的定义内初始化?
- VC6.0中,整型const static成员不能在类的定义体中初始化.
- 为什么static成员必须在类外初始化,而不能在类的头文件中初始化
- static成员变量在类的定义体中初始化
- C++类内为什么不能定义非const的static成员(待续)
- C/C++——为什么类的静态成员函数在定义的时候不写static?
- 关于为什么类的静态成员变量不能立即初始化
- 关于为什么类的静态成员变量不能立即初始化
- 关于为什么类的静态成员变量不能立即初始化 .
- 关于为什么类的静态成员变量不能立即初始化
- 关于C++ 类数据成员初始化的一点总结【为什么类定义中不能初始化成员变量】
- 类的静态数据成员在 类内只能声明,定义和初始化必须在类外
- 类的静态数据成员在 类内只能声明,定义和初始化必须在类外
- C++ static成员/类专属成员的定义/静态成员
- 只有静态的常量整形数据成员才可以在类定义中初始化
- c++中静态成员变量要在类外部再定义或初始化的原因
- c++中静态成员变量要在类外部再定义或初始化的原因
- C++ 静态成员的类内初始化
- c++构造函数详解
- Js获取当前日期时间及其它操作
- java.lang.OutOfMemoryError: Java heap space解决方法
- Quartz的cron表达式
- UVA 1479 - Graph and Queries(Treap)
- 【c++】为什么类中静态(static)成员不能在类的定义内初始化?
- 冒泡排序(bubble sort)、直接插入排序(straight insertion sort)、简单选择排序(simple selection sort)
- 文件的基本概念
- cocos2d-x 3.0开发笔记---用progressTimer制作血槽
- Search in Rotated Sorted Array
- 归并排序
- $.ajax()前台数据传至后台,中文乱码问题
- Java里的堆(heap)栈(stack)和方法区(method)
- uva 11255 Necklace