标签:初始化 应用 数组定义 修改 图片 的区别 namespace 指针 block
const的定义:const是ANSI C中的的关键字,它限定一个变量不允许被改变,产生静态作用。使用const在一定程度上可以提高程序的安全性和可靠性,const在其它编程语言中也有出现,例如Pascal、C++、PHP5、BC#等。
一.const在c和c++中的基础用法
const 用于定义变量,当int const a=10;时此时变量a只有只读权利。这时a为只读,就不能为左值,即不能被赋值。
?? 注意此时const int a=10;与int const a=10;语义相同。const修饰一个变量时,一定要给这个变量初始化,若不初始化,在后面也不能初始化。
#include<iostream>
using namespace std;
const int a=10;
int main(){
?int b=a; //不为左值 合法
?a=100 //为左值 非法
?? 但由enum类型和#define宏定义的数就可以用来定义常量初始换数组。
二.const和#define的区别
?? 他们两个从功能上说它们很像,但它们又有不同。
define是预编译指令,而const是普通变量的定义。const定义的是变量,而#define定义的是常量。#define定义的宏是在预处理阶段展开的,而const定义的只读变量是在编译运行阶段使用的。例如刚刚的初始化数组,用#define就能够运行。
因为常量是被编译器放在内存中的只读区域,当然也就不能够去修改它。而“只读变量”则是开辟一个新内存来存放它的值,只不过这个值由编译器限定不允许被修改。而ANSI C规定数组定义时长度必须是“常量”,所以会报错。
但其实除了不能作为数组的长度,用const定义的常变量具有宏的优点,而且使用更方便。所以编程时在使用const和define都可以的情况下尽量使用const。
三.const与一维指针的运用
const int p1=&a;等价于int const p1=&a;
const int p1=&a; ?//const修饰p1,将p1作为左值合法,将p1作为左值非法
我们可以看出,const修饰的是p1,不能直接改变 *p1的值,但可以改变指向来改变p1的值。
??总结:const后面是什么,什么就不能被修改。Eg.const int p1=&a; 和const int p2=&a; 分别为*p1的值和p2指向不能改变。
四.const在与函数
??const更大的作用是它可以修饰函数的参数、返回值,甚至函数的定义体。但需要注意的是如果参数做输出需要,用const就失去了功能。
void StringCopy(char*strDestination, const char *strSource);
?其中strSource是输入参数,strDestination是输出参数。给strSource加上const修饰后,如果函数体内的语句试图改动strSource的内容,编译器将指出错误。
const int* func(void){ //函数声明
?int* a = func(); //报错
?int* c = const_cast<int*>(func()); //正确
?const int* b = func(); }//正确
(3)const 成员函数
不修改数据成员的函数都尽量声明为const类型。如果在编写const成员函数时,不慎修改了数据成员,或者调用了其它非const成员函数,编译器将指出错误。
标签:初始化 应用 数组定义 修改 图片 的区别 namespace 指针 block
原文地址:https://www.cnblogs.com/xqy-888/p/11515485.html