C++头文件中,定义全局const变量默认是static的, 所以在头文件中定义全局const变量, 前面不需要添加static防止重复定义, 即使添加了也不会出错—-没有副作用.
C++头文件, 定义全局非const变量, 如果不添加static, 则会出现重复定义链接错误, 解决方法: 全局非const变量添加static但是, 但是, 你丫的在头文件中定义全局非const变量, 你想干啥, 对于任何在头文件中定义非const全局变量的程序员, 你都可以在他屁股上狠狠的踹上一脚, 告诉他never, never, never do this.
头文件中定义全局函数, 会出现”重复定义链接错误”, 解决方法:
(1) 将全局函数声明为”静态全局函数”, 即: 在函数前面添加static关键字
(2) 将全局函数定义为”内联函数”, 即:在函数前面添加inline关键字
类中的const与全局const不一样:
(1) 类const成员变量, 其与全局const变量不同. 对于const成员, 每个类实例都包含一份, 其值可能会不同.
而全局const变量只有一份
(2) 类const成员变量, 严格意义上将, 不是字面上的const(编译期常量), 而是类似C#中的readonly, 在运行期,
类实例构造函数”初始化列表”中初始化, 初始化后, 在类实例的声明周期类, 此const成员变量值无法修改.
(3) 类static const变量才与全局const变量意义相同, 类static const变量属于类成员, 而不是类实例成员.
类static const变量声明、定义有两种方式:
a.
class Test
{
static const int ConstNum = 5;
}
int main()
{
Test t;
cout << t::ConstNum << '\n'; // 5
}
b.
class Test
{
static const int ConstNum;
}
//static const Test::ConstNum = 5; // 错误写法, 不能添加static
const int Test::ConstNum = 5;
int main()
{
Test t;
cout << t::ConstNum << '\n'; // 5
}
摘录:
const全局常量才是真正意上的常量,而局部const常量其不是真正意义上的常量。
const全局常量存储空间在文本常量区上分配,而局部的,其存储空间在栈区分配。故const全局常量不能被修改。
个人理解:
const全局常量及局部static const常量才是真正意上的常量,而局部非static const常量其不是真正意义上的常量。
const全局常量存储空间在文本常量区上分配,而局部的,其存储空间在栈区分配。