【c++】为什么类中静态(static)成员不能在类的定义内初始化?
先看一段代碼:
#include <iostream> #include <string> using namespace std;class loopsaker{ public:static int a = 111;//wrongloopsaker(); };int main(int argc,char const *argv[]) {cout << loopsaker::a << endl;return 0;}這里的錯誤在于,不能在class的定義里面初始化a。
來看下對的:
#include <iostream> #include <string> using namespace std;class loopsaker{ public:static int a;//wrongloopsaker(); };int loopsaker::a = 111;int main(int argc,char const *argv[]) {cout << loopsaker::a << endl;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
————————————————
版權聲明:本文為CSDN博主「loopsaker」的原創文章,遵循 CC 4.0 BY-SA 版權協議,轉載請附上原文出處鏈接及本聲明。
原文鏈接:https://blog.csdn.net/loopsaker/article/details/38825711
總結
以上是生活随笔為你收集整理的【c++】为什么类中静态(static)成员不能在类的定义内初始化?的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 按我的理解string似乎不是字面值类型
- 下一篇: c++类的静态成员特性