1、const基础知识

 #include <iostream>

 int main(void)
{
//const定义常量--->const意味着只读
const int a;
int const b; // 第一个和第二个意思一样,代表一个常整数型 const int *c;//第三个 c是一个指向常整型数的指针(所指向的内存数据不能被修改,但是本身可以修改) int * const d;//第四个 d常指针(指针变量不能被修改,但是它所指向内存空间可以被修改) const int * const e;//第五个 e一个指向常整型的常指针(指针和它所指向的内存空间均不能被修改) return ;
}

红色代表可修改,蓝色代表不可修改

合理的利用const的好处:
(1)指针做函数参数,可以有效的提高代码可读性,减少bug;
(2)清楚的分清参数的输入和输出特性。

如:

int setTeacher_err( const Teacher *p)
const修改形参的时候,在利用形参不能修改指针所指向的内存空间。

2、C语言中的“冒牌货”

 #include <stdio.h>

 int main()
{
const int a = ;
int *p = (int*)&a;
print("a===>%d\n", a);//a=10 *p = ;
print("a===>%d\n", a);//a=11
//C中是只读变量,并不是真正的变量
return ;
}
 #include <iostream>
using namespace std; int main(void)
{
const int a = ;//a是真正的常量
int *p = (int*)&a;
cout << "a=" << a << endl;//;a = 10
cout << "*p=" << *p << endl;//* p = 10 *p = ;//改变的是临时开辟的temp变量
cout << "a=" << a << endl;//a = 10
cout << "*p=" << *p << endl;//* p = 20
return ;
}

3、const 和 #define 的相同

(1)C++中的const修饰的,是一个真正的常量,而不是C中变量(只读),在const修饰的常量编译期间,就已经确定下来了;

(2)C++中的const常量类似于宏定义:const int c = 5; ≈ #define c 5

C++中的const常量与宏定义不同:const常量是由编译器处理的,提供类型检查和作用域检查;宏定义由预处理器处理,单纯的文本替换。

C语言中的const变量
C语言中const变量是只读变量,有自己的存储空间
C++中的const常量
可能分配存储空间,也可能不分配存储空间;
当const常量为全局,并且需要在其它文件中使用,会分配存储空间;
当使用&操作符,取const常量的地址时,会分配存储空间;
当const int &a = 10; const修饰引用时,也会分配存储空间。

4、真正的枚举

C语言中枚举本质就是整型,枚举变量可以用任意整型赋值。而C++中枚举变量, 只能用被枚举出来的元素初始化。

 #include <iostream>
using namespace std; enum season{spring,summer,autumn,winter}; int main(void)
{
enum season s = spring;
//s = 0; //error,但是C语言可以通过
s = summer;
cout << "s=" << s << endl; //
return ;
}

C++语言对C的增强(2)—— const增强、枚举的增强的更多相关文章

  1. 重新想象 Windows 8.1 Store Apps (77) - 控件增强: 文本类控件的增强, 部分控件增加了 Header 属性和 HeaderTemplate 属性, 部分控件增加了 PlaceholderText 属性

    [源码下载] 重新想象 Windows 8.1 Store Apps (77) - 控件增强: 文本类控件的增强, 部分控件增加了 Header 属性和 HeaderTemplate 属性, 部分控件 ...

  2. 增强篇3 SAP表字段增强

    有两种方式:  Include  和 Append 1.INCLUDE一般都是标准预留的增强: 以CO01生产订单增强字段为例 在表AUFK中INCLUDE的结构“CI_AUFK”加入自定义字段 保存 ...

  3. 04C++const增强、枚举的增强

    #include <iostream> int main(void) { //const定义常量--->const意味着只读 const int a; int const b; // ...

  4. C++ c++与C语言的区别(三目运算符,const修饰符)

    //区别⑦:三目运算符(C++版本) #include<iostream> using namespace std; //三目运算符 C语言返回变量的值 C++语言是返回变量本身 void ...

  5. 【C语言 C++】简单keywordRegister,Const,Static,Volatile,typedef,Define的理解

    Register 用register声明的变量称着寄存器变量,在可能的情况下会直接存放在机器的寄存器 中.但对32位编译器不起作用.当global optimizations(全局优化)开的时候,它会 ...

  6. C语言关键字—-sizeof 、typedef、const、static、register、extern、#define

    关键字:sizeof .#define.typedef.const.static.register.extern sizeof 1. 作用:求数据所占得内存空间大小 2. 本质:求数据得类型所占的内存 ...

  7. 07.C语言:结构体、共用体、枚举

    一.结构体 是一种复合的数据类型,由多个不同类型的数据(为结构体的成员)组成的集合. 在c语言中没有给出结构体这种类型具体的形式(名称),但是给出类定义该结构体类型的方法(格式). 在使用结构体类型时 ...

  8. C语言基本语法——结构体、联合和枚举

    一.结构体 1.什么是结构体 2.结构体语法格式 3.结构体所占内存空间 4.结构体成员赋值 二.联合 1.什么是联合 2.联合语法格式 三.枚举 1.什么是枚举 2.枚举语法格式 一.结构体 1.什 ...

  9. 知识点:C语言进阶提高篇,自定义数据类型:枚举

    一.枚举的概念 枚举是C语言中的一种基本数据类型,并不是构造类型,它可以用于声明一组常数.当一个变量有几个固定的可能取值时,可以将这个变量定义为枚举类型.比如,你可以用一个枚举类型的变量来表示季节,因 ...

随机推荐

  1. Python学习进程(14)异常处理

        本节介绍Python进行异常处理的方式,异常处理机制可以帮助我们调试python程序.     (1)异常的简介:     异常即是一个事件,该事件会在程序执行过程中发生,影响了程序的正常执行 ...

  2. window.name跨域

    window.name? 每一个页面都有一个自己的window,而window.name是window的名字. window.name跨域原理 window对象有个name属性,该属性有个特征:即在一 ...

  3. Raspberry Pi开发之旅-WIFI遥控小车

    一.简单介绍树莓派的GPIO口 上图是树莓派2代的接口(不同型号接口会有差异),我们就以此为例来说下这些接口. 1.GPIO介绍 GPIO 英文全称是:General-purpose input/ou ...

  4. 20165101刘天野 2017-2018-2 《Java程序设计》第8周学习总结

    #20165101刘天野 2017-2018-2 <Java程序设计>第8周学习总结 教材学习内容总结 第十二章Java多线程机制 一.进程与线程 1.1.任务调动 大部分操作系统(如Wi ...

  5. Kubernetes Metrics-Server

    github地址:https://github.com/kubernetes-incubator/metrics-server 官网介绍:https://kubernetes.io/docs/task ...

  6. TortoiseSVN教程级别指南

    安装说明 开发人员强烈建议使用IDE中的SVN插件更加智能与人性化. 首先安装SVN客户端,windows一般选择乌龟客户端https://tortoisesvn.net/downloads.html ...

  7. Luogu-2495 [SDOI2011]消耗战

    虚树第一题 对于每次询问的点建立一棵虚树,然后在树上DP,一个点的答案就是这个点的父边切断的代价与所有儿子切断的代价去最小值,当然如果这个节点是资源点则必须切父边 注意在虚树上一条边的代价应该是中间所 ...

  8. 进程【TLCL】

    ps命令 ps x 加上 "x" 选项(注意没有开头的 "-" 字符),告诉 ps 命令,展示所有进程,不管它们由什么 终端(如果有的话)控制. 在 TTY 一 ...

  9. HBase-scan简介及优化(缓存与批量处理)

    扫描(scan) 这种技术类似于数据库系统中的游标(cursor),并利用到了HBase提供的底层顺序存储的数据结构. 扫描操作的使用跟get方法非常类似.由于扫描操作的工作方式类似于迭代器,所以用户 ...

  10. 直播P2P技术3-伙伴节点质量评估及子流订阅

    以上模型,暂且称之为W-P2P吧.