P5 常量

P5 常量

作用:用于记录程序中不可更改的数据, 比如一周七天,这个七是不可更改的。

有两种方式可以定义常量:

  1. #define 宏常量:通常在文件上方定义,表示一个常量
    #define 常量名 常量值
  2. const修饰的变量:通常在变量定义前加const,修饰该变量为常量,不可修改
    const 数据类型 常量名 = 常量值
#include<iostream>
using namespace std;

//常量的定义方式
//1、#define 宏常量
//2、const修饰的变量

#define Day 7

int main() {

	// Day = 14; 此语句加在这里,程序会报错
	cout << "一周总共有:" << Day << " 天" << endl;

	const int month = 12;
	//month = 24;//报错,const修饰的变量也称为常量

	cout << "一年总共有: " << month << " 个月份" << endl;
	system("pause");
}

因为const对象一旦创建后其值就不能再改变,所以const对象必须初始化,一如既往,初始值可以是任意复杂的表达式:

const int i = get_size(); //正确:运行时初始化
const int j = 42;         //正确:编译时初始化
const int k;              //错误:k是一个未经初始化的常量

在不改变const对象的操作中还有一种是初始化,如果利用一个对象去初始化另外一个对象,则它们是不是const都无关要紧:

int = 42; 
const int ci = i; //正确:i的值被拷贝给了ci
int j = ci;       //正确:ci的值被拷贝给了j

尽管ci是整型常量,但无论如何ci中的值还是一个整形数。ci的常量特征仅仅在执行改变ci的操作时才会发挥作用。当用ci去初始化j时,根本无需在意ci是不是一个常量。拷贝一个对象的值并不会改变它,一旦拷贝完成,新的对象和原来的对象没什么关系了。

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

某些时候有一种const变量,它的初始值不是一个常量表达式,但又确实必有必要在文件间共享,在这种情况下,我们不希望编译器为每个文件分别生成独立的变量。相反,我们想让这类const对象像其他(非常量)对象一样工作,也就是说,只在一个文件中定义const,而在其他多个文件中声明并使用它。

解决的办法是,对于const变量不管是声明还是定义都添加extern关键字,这样只需定义一次就可以了。

//file_1.cc定义并初始化了一个常量,该常量能被其他文件访问
extern const int bufSize = fcn();
//file_1.h头文件
extern const int bufSize;

file_1.cc定义并初始化了bufSize。因为这条语句包含了初始值,所以它显然是一次定义。然而,因为bufSize是一个常量,必须用extern加以限定使其被其他文件使用。
file_1.h头文件中的声明也由extern做了限定,其作用是指明bufSize并非本文件所独有,它的定义将在别处出现。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值