zoukankan      html  css  js  c++  java
  • C++静态全局变量问题

    C++中,在文件中,类外,声明一个非静态变量,这个就是全局变量,它的作用域是全局的,链接时个编译单元一起

    C++中,在文件中,类外,声明一个静态变量,这个就是静态全局变量,作用域是编译单元,因此同一个全局静态变量链接时不会报重复链接错误

    #pragma once
    #include<vector>
    
    
    class MyClass
    {
    public:
        void Test();
    
        float Testfloat();
    };
    
    std::vector<int> g_vec; //全局变量,被多个文件包含会链接错误【重复的符号】
    static std::vector<int> gs_vec; //静态全局变量,被多个文件包含时,每个文件中一个实例

    全局变量的正确用法:

    方式一,声明中使用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);
    }

    方式二,使用时用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); }
  • 相关阅读:
    在Netty使用中TLSv1.3
    基本路径测试
    测试准备
    skywalking源码中添加日志代码并打印
    Java应用启动集成skywalking
    Logback获取全局唯一标识 traceid记录到日志中
    通过示例展示Byte Buddy 如何增强 log() 方法
    SpringIOC
    Flask 信号机制
    Django 信号机制
  • 原文地址:https://www.cnblogs.com/timeObjserver/p/13540768.html
Copyright © 2011-2022 走看看