1. C中的const

C中const变量只是只读变量,有自己存储空间。可能被存放在 栈、堆、数据段,所以可以修改。

2. C++中const

可能分配空间,也可能不分配空间。

当 const 为全局时,并且需要在其他文件中使用,或当使用 & 操作符取 const 常量的地址时,会分配空间。

3. C++中const 和 #define 的联系

(1)C++编译器堆const常量的处理

当碰见常量声明时,在符号表中放入常量。

编译过程中若发现使用常量则直接以符号表中的值替换

编译过程中若发现对const修饰的常量使用了 extern 或者 & 操作符,则给对应的常量分配存储空间。

(2)const 和 #define 的区别

const 是在编译阶段处理, #define 是在预编译处理,

const 有作用域,类型检查。 #define 只是纯粹的文本替换,作用域从定义开始直到文末或 #undef。

    ;
    ;
    int c[a + b];
    上面这种定义是错误的(gcc除外)。

    ;
    ;
    int c[a + b];
    这样在C++中是正确的。
    原因是当 C++ 编译器扫描到
    ;
    ;
    会将 a ,b 放到 符号表中。
    当扫描到 int c[a + b];
    会直接将 a,b从符号表中替换,
    也成了  + ];
    所以 #define 和 const 在 C++中类似。

C++基础 const的更多相关文章

  1. c/c++基础 const

    int main(int argc, char* argv[]) { '; '; a1='; //a2='2'; //a2是字符常量 "; "; a3="; //a4=& ...

  2. C#基础 const和readonly关键字

    静态常量 所谓静态常量就是在编译期间会对变量进行解析,再将常量的值替换成初始化的值.动态常量 所谓动态常量就是编译期间会将变量标记只读常量,而不用常量的值代替,这样在声明时可以不初始化,可以延迟到构造 ...

  3. C++ 基础 const放在函数末尾的意思

  4. C#学习

    C#开发轻松入门(慕课网)1.C#简介 1-1 .NET简介 .NET平台可运用多种语言编程,C#配合的最好. 1-2 Visual Studio简介及安装 ... 1-6 Hello World 控 ...

  5. AES的S-BOX构造优化

    之前写过SBOX的构造,后来看到别人的优秀思路,借鉴过来重新改了一点. 原文地址:http://www.cnblogs.com/7hat/p/3383546.html 主要是将矩阵运算改为列运算之和, ...

  6. AES的S-BOX构造

    利用GF(2^8)乘法逆元,以及矩阵运算,可以构造出AES的SBOX. 求乘法逆元的一般方法是利用扩展欧几里得定理,在这里我取了个巧. 因为我已经有了GF的指数表(见上一篇文),利用指数表可以轻易地构 ...

  7. GF(2^8)乘法优化

    利用指数表和对数表,实现GF(2^8)的乘法优化. 首先利用简单的基础的GF(2^8)乘法,构造指数表和对数表.在这里选取生成元3. 指数表exp[i] = 3^i,对数表log[i] = log3( ...

  8. Practical Node.js (2018版) 第7章:Boosting Node.js and Mongoose

    参考:博客 https://www.cnblogs.com/chentianwei/p/10268346.html 参考: mongoose官网(https://mongoosejs.com/docs ...

  9. ES6 - 解构(数组和对象)

    解构对象 /** * 解构:快捷,方便 * * 对象解构 */ { var expense = { type: "es6", amount: "45" }; / ...

随机推荐

  1. jq中事件绑定的方法

    在唯品会实习生面试中,被面试官问了这么一个问题,“jQuery中绑定事件的方法有几个?”,以click事件为例,我当时想到的只有.click(),.bind(),.on()这三种,然后面试官又追问,“ ...

  2. select标签使用 三目运算符

    <td> <select id="roleName" name="roleName" class="input" styl ...

  3. JS在与lua的交互心得

    最近在写一个项目,前端技术使用的是Vue,在与lua的交互过程,是通过一个公共JS,前端调用公共js的方法给lua发送命令,lua接到命令,去执行一些方法,然后又通过回调返回到了前端,由于是第一次写这 ...

  4. Oracle:Start with connect by prior 递归

    SELECT * from CONNECT BY {PRIOR列名1=列名2|列名1=PRIOR列名2} [START WITH]; Oracle的递归查询:     START WITH :描述开始 ...

  5. xcode import pod 文件不提示

    在使用第三方类库时,使用cocoaPods是非常方便的,具体使用方法可以参考:CocoaPods安装和使用教程 的安装使用方法.今天讨论的问题是,我在使用的时候遇到了一些问题:用cocoaPod si ...

  6. zabbix 编译安装指导

    zabbix 编译安装 下载 安装 安装后的配置 下载源码包 zabbix官网:https://www.zabbix.com/ zabbix下载:https://www.zabbix.com/down ...

  7. simotion ST编程,变量和程序的模块化

    通过这几年的实践,对simotion的程序结构规划有了一些新的理解.工程师在面对项目时,经常有几个问题比较困惑. 目前面对的问题 1)如何理解其他人编写的程序 2)如何从程序中找到可以移植的部分 传统 ...

  8. C++学习之虚析构函数

    什么样的情况下才需要虚析构函数? 类需要控制自己的对象执行一系列操作时发生什么样的行为,这些操作包括:创建(对象).拷贝.移动.赋值和销毁.在继承体系中,如果一个类(基类或其派生的类)没有定义拷贝控制 ...

  9. DP上课覆盖知识点,POJ(1513)

    题目链接:http://poj.org/problem?id=1513 解题报告: 思路: 知识点从第二个开始扫,递推表达式是:minlec[i]=min(minlec[k])+1,并且要保证,tim ...

  10. 几乎零配置产生Nuget包的库:White Tie

    通过Nuget管理器为你所需要产生Nuget包的项目安装White Tie,目前最新版本为1.3.16,VS2015下可用,VS2013应该问题也不大,VS2010就不好说了. 安装好之后直接重新生成 ...