C++中extern static const 综合理解

更新:

关于全局的理解,在同一个项目里,所有的函数默认其实都是extern的,即在一个cpp里声明一个全局函数,在main中声明一下,不需要include,编译的时候也能找到。 而每个文件里的变量如果需要全局访问则需要extern,无论是先定义int a=10,在extern int a还是先extern int a,再定义a都行。extern主要是保证在你需要的时候能够访问a,多和声明在一起。

extern:

正常的extern用法:

在.h中声明,在cpp中定义,其他文件引用该头文件,直接用

test.h:

extern int a;

test.cpp:

int a=3;

use.cpp===========

#include "test.h"

std::cout<<a<<std::endl;

extern C不在讨论范围(引用:C"一起连用时,如extern "C" void fun(int a, int b);,则编译器在编译fun这个函数名时按C的规则去翻译相应的函数名而不是C++的)

注意:

尽量不要再头文件中直接定义,如extern int a=10;如果有多个文件引用头文件test.h,会提示重复定义错误。即使在h中,#pragma once。(因为每个编译单元是单独的,都会对它各自进行定义)。参考https://blog.csdn.net/u014557232/article/details/50354127

static:

首要原则:static和extern不重复存在。static最多的用在类里边,作为类的静态变量,有时候可以作为不同实例间的共有标记。

static修饰的全局变量的声明与定义同时进行,相当于声明的时候就分配了内存空间。作用域只能作为当前的编译单元/文件。

注意:

如果头文件中含有static定义的话,多个文件include这个头文件的时候,均可以访问这个变量,但是每个文件访问的

变量均是独立的,内存地址不一样,相当于拷贝。

所以不要再头文件中使用static,如果项目复杂的话,会导致各种变量很痛苦

const:

const单独使用,特性和static一样。

c++primer p54:默认情况下,const对象被设定为仅在文件内有效,当多个文件中出现了同名的const变量时,其实相当于在不同文件中分别定义了独立的变量。

注意:

我们想让const对象像其他对象一样工作,在一个文件中定义,多个文件中使用:

const变量不管是定义还是生命都添加extern关键字。

test.cpp

extern const int a=10;

test.h

extern const int a;

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值