C++静态全局变量问题
生活随笔
收集整理的這篇文章主要介紹了
C++静态全局变量问题
小編覺(jué)得挺不錯(cuò)的,現(xiàn)在分享給大家,幫大家做個(gè)參考.
C++中,在文件中,類外,聲明一個(gè)非靜態(tài)變量,這個(gè)就是全局變量,它的作用域是全局的,鏈接時(shí)個(gè)編譯單元一起
C++中,在文件中,類外,聲明一個(gè)靜態(tài)變量,這個(gè)就是靜態(tài)全局變量,作用域是編譯單元,因此同一個(gè)全局靜態(tài)變量鏈接時(shí)不會(huì)報(bào)重復(fù)鏈接錯(cuò)誤
#pragma once #include<vector>class MyClass { public:void Test();float Testfloat(); };std::vector<int> g_vec; //全局變量,被多個(gè)文件包含會(huì)鏈接錯(cuò)誤【重復(fù)的符號(hào)】 static std::vector<int> gs_vec; //靜態(tài)全局變量,被多個(gè)文件包含時(shí),每個(gè)文件中一個(gè)實(shí)例?
全局變量的正確用法:
方式一,聲明中使用extern
1,頭文件中聲明, MyClass.h
#pragma once #include<vector>class MyClass { public:void Test();float Testfloat(); };extern std::vector<int> g_vec;2,任意CPP中定義: MyClass.cpp
#include <vector> //#include "myheader.h"std::vector<int> g_vec;3,#include"MyClass.h"后使用
#include "MyClass.h"int main() {g_vec.push_back(10); }?
方式二,使用時(shí)用extern
?
1,頭文件中聲明, MyClass.h
#pragma once #include<vector>class MyClass { public:void Test();float Testfloat(); };std::vector<int> g_vec;2, extern? 后使用,不需要#include"MyClass.h"
extern std::vector<int> g_vec; int main() { g_vec.push_back(10); }?
總結(jié)
以上是生活随笔為你收集整理的C++静态全局变量问题的全部?jī)?nèi)容,希望文章能夠幫你解決所遇到的問(wèn)題。
- 上一篇: SVN 提交子文件夹问题
- 下一篇: C# 接口持有结构体会导致装箱问题