C++中extern static const 综合理解

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;

猜你喜欢

转载自blog.csdn.net/qieziming/article/details/89202744