C++/C常量
简介
1. 易忽略的常量:函数地址(函数名)、静态数组的名字、字符串常量的地址。
2. 常量分类:字面常量、符号常量、契约性常量、布尔常量、枚举常量。
常量认知
1. 字面常量
包括:各种进制的数字、字符、字符串。
存储位置:程序的符号表中,非数据区。只能引用不能修改。只允许获取字符串的地址。
x=-100.25f;
char c='a';
const char *pchar = "abcd";
int *pInt = NULL;
2. 符号常量
包括:#define 定义的宏常量、const定义的常量。
|
#define //const常量存储方式 1. #define 定义的宏常量在进入编译阶段之前就已经被替换为字面常量,宏常量的本质就是字面常量。 |
|
const //const常量存储方式 1. C中,const常量为值不能修改的变量,分配存储空间。 2. C++中,基本数据类型的const常量放置在符号表中, ADT数据类型、强制extern的const常量分配存储空间。 //有用的实践 3. 取const常量的地址: 基本数据类型const常量:编译器在内存中创建一个拷贝,实际访问的是拷贝地址,非原始地址,无法通过指针修改基本类型const常量。 构造数据类型const常量:可以通过获取常量指针,绕过编译器修改const常量。 结论:只要得到对象的指针(内存地址),就可以越过编译器修改其内容,除非受到操作系统保护。 |
3. 使用符号常量替代字面常量
why:
a.提高程序可读性。
b.方便多处的相同数字或字符串修改。
c.避免多次输入同样的数字或字符串引入错误。
4. 类中的常量
作用:
将常量与类关联在一起,使其只在类中生效。
方式:
a.单个对象中的常量
类中声明的const常量:
//只是对象声明周期内的常量
//不同对象的const常量可不同
class A
{
A(int size)
const int SIZE; //常量声明
const int size= 错误的用法
}; A::A(int size):SIZE(size) //利用构造函数初始化列表初始化常量
{
} A a(); //SIZE==100
A b(); //SIZE==200
b.整个类内的常量:所有对象共享的常量
enum常量:
enum常量不占据对象的内存空间
class A
{
enum
{
SIZE1=;
SIZE2=;
};
int array1[SIZE1];
};
static const 常量:
class A
{
static const int SIZE=;//某些编译器不支持该用法 int array[SIZE];
};
C++/C常量的更多相关文章
- C++11特性——变量部分(using类型别名、constexpr常量表达式、auto类型推断、nullptr空指针等)
#include <iostream> using namespace std; int main() { using cullptr = const unsigned long long ...
- JavaScript 常量定义
相信同学们在看见这个标题的时候就一脸懵逼了,什么?JS能常量定义?别逗我好吗?确切的说,JS当中确实没有常量(ES6中好像有了常量定义的关键字),但是深入一下我们可以发现JS很多不为人知的性质,好好利 ...
- ES6之变量常量字符串数值
ECMAScript 6 是 JavaScript 语言的最新一代标准,当前标准已于 2015 年 6 月正式发布,故又称 ECMAScript 2015. ES6对数据类型进行了一些扩展 在js中使 ...
- Java常量的应用
所谓常量,我们可以理解为是一种特殊的变量,它的值被设定后,在程序运行过程中不允许改变. 语法:final 常量名 = 值; 使用fianl关键字 常量名 值 final String a1 = &qu ...
- 原创 C++之常量(二)
4常量的内存分配 4.1应用程序的内存结构 一个由C++编译的应用程序,占用的内存可以划分为如下几个部分: 栈(stack).由编译器自动分配释放.存放函数参数和函数里的局部变量(又称自动变量).其操 ...
- 原创 C++之常量(一)
1概述 一个C++程序就是一系列数据与操作的集合.当一个C++程序开始运行的时候,与该程序相关的数据就会被加载到内存中.当数据与内存发生关联的时候,这些数据就会具有如下的特性: 数据在内存中的地址.这 ...
- 1.2 - C#语言习惯 - 用运行时常量readonly而不是编译期常量const
C#中有两种类型的常量:编译期常量和运行时常量.二者有着截然不同的行为,使用不当将会带来性能上或正确性上的问题. 这两个问题最好都不要发生,不过若难以同时避免的话,那么一个略微慢一些但能保证正确的程序 ...
- swift 简介和常量与变量 --- swift 入门
一.思维导图 二. 代码 //创建UIView 和按钮 let views = UIView(frame: CGRect(x:20, y: 20, width: 100, height: 100))/ ...
- java为什么非静态内部类中不能有static修饰的属性,但却可以有常量?
如:public class InnerClassDemo{int x;class A{static int a = 0;//这样写是不合法的.static final int b=0;//这样写是合 ...
- String字符串针对常量池的优化
String对象是java语言中重要的数据类型,但是不是基本数据类型.相对于c语言的char java做了一些封装和延伸. 针对常量池的优化:当两个String拥有相同的值时,它们只引用常量池中的同一 ...
随机推荐
- git 基本用法
p.p1 { margin: 0.0px 0.0px 0.0px 0.0px; font: 18.0px "Helvetica Neue"; color: #454545 } p. ...
- wpf使用devexpress RibbonControl实现导航窗体
实现如下效果 <Window xmlns:dxr="http://schemas.devexpress.com/winfx/2008/xaml/ribbon" ...
- FZU 2243 Daxia like uber
枚举,最短路. 求出5个点出发的最短路,然后枚举一下这些点之间走的顺序. #pragma comment(linker, "/STACK:1024000000,1024000000" ...
- KMP 算法 学习 整理
我自己整理的KMP算法的PDF文件:http://pan.baidu.com/s/1o8yKIi2提取密码:8291 别的就不多说啥了,感谢来自海子 博客园的 资料--
- 一步步优化JVM二:JVM部署模型和JVM Runtime
选择JVM部署模型 JVM部署模型的选择总体来说就是决定应用是部署在单个JVM实例还是多个JVM实例上(这里简单举例说明一下JVM实例,比如:我们常用eclipse开发,启动一个eclipse就 ...
- Ubuntu14.04浏览器Firefox安装flash播放插件
sudo apt-get update sudo apt-get install flashplugin-nonfree ================= 类飞秋软件 sudo apt-get in ...
- jquery 使用attr() 函数对复选框无效的原因
复选框是网站开发的时候经常用到的网页标签之一,常见的在页面上对复选框的操作包括取值和修改复选框的状态.在jquery中,常见的操作标签的值得函数为attr,然而在操作复选框的时候,通常采用的却是pr ...
- 基于AFN的多张图片上传
不废话,直接上代码 NSString *urlString = [NSString stringWithFormat:@"http://192.168.1.166:8080/Discipli ...
- javascript实现验证身份证号的有效性并提示
javascript实现验证身份证号的有效性并提示 function nunber(allowancePersonValue){ if(allowancePersonValue=="身份证号 ...
- 微信超时5s,调用客服接口异步回复消息(PHP)
当用户触发事件,如果不能保证在5s内响应,可以先返回success,然后异步调用返回的信息.代码如下: // 立即返回(异步执行) ignore_user_abort(true);//start=== ...