• const 在C中只是个“只读变量”,并不是真正意义上的常量,通过指针能改变它,如下
  1.  #include<stdio.h>
    int main()
    {
    const int a=;//声明只读变量a为0
    int* p=(int*)&a;//给个指针指向a的空间
    *p=;//改变a的存储空间的内容
    printf("a=%d",a);//a被更改为100
    return0;
    }


  • const在C++中是真正意义上的常量,无法通过指针来改变
  1.  #include<iostream>
    usingnamespace std;
    int main()
    {
    const int a=;//声明只读变量a为0
    int* p=(int*)&a;//给个指针指向a的空间
    *p=;
    cout<<a;
    return0;
    }

 
即使分配了空间也不会用存储空间里面的内容,只会使用符号表的值。
 
再举个例子:
 constint a=;
constint b=;
int c[a+b];
上面的代码在C中会报错“无法确定数组长度”,因为在C中const只是个只读变量,本质上还是变量,有存储空间,定义数组长度用变量当然会出错了。
但在C++中却可以编译通过,因为C++对const做了加强,使得const是真正意义上的常量。
 
 
  • const和#define的区别

#define只是在编译前(预处理)进行普通的文本替换,没有作用域检查!

  1.  #include<iostream>
    usingnamespace std;
    int f(){
    cout<<B<<endl;
    }
    int g(){
    #define N 3//只希望在这个函数中用N=3
    constint a=;// 希望在这个函数中用 a=100
    }
    #define B 1
    int main()
    {
    cout<<N<<endl;
    f();
    return0;
    }


这个代码第4行会出错“[Error] 'B' was not declared in this scope”,B没有定义,说明#define编译前进行简单文本替换时,只替换#define 下面的所有,位于#define上面的则没有替换。
 
const 则由编译器处理,有作用域检查和类型检查
  1.  #include<iostream>
    usingnamespace std;
    int f(){
    constint a=;//只希望a=100的作用域在f()中
    }
    }
    int main()
    {
    cout<<a<<endl;//出错,没有定义a,因为a作用域只在f()中
    return0;
    }


#define可以用 #undef 限定作用域,不过有点麻烦:
  1.  int g(){
    #define
    int a=;
    #undef
    }
 
  • C++对函数类型和参数的加强
 
 
 
  • C++中三目运算可以返回变量(前提是a,b不能是常量!(a<b?1:)=50;这个一看就是错的),而C中则不行(三目运算符(a<b ?a :b)  先判断问号左边是否为真,若为真执行a,否则执行b)
如:
  1.  int main()
    {
    int a=;
    int b=;
    (a<b?a:b)=;
    printf("%d %d",a,b);
    }
 
但C中上述代码会出错,三目运算符不能返回变量。
 
 
 
 

C到C++的升级的更多相关文章

  1. Linux平台 Oracle 10gR2(10.2.0.5)RAC安装 Part3:db安装和升级

    Linux平台 Oracle 10gR2(10.2.0.5)RAC安装 Part3:db安装和升级 环境:OEL 5.7 + Oracle 10.2.0.5 RAC 5.安装Database软件 5. ...

  2. 看完SQL Server 2014 Q/A答疑集锦:想不升级都难!

    看完SQL Server 2014 Q/A答疑集锦:想不升级都难! 转载自:http://mp.weixin.qq.com/s/5rZCgnMKmJqeC7hbe4CZ_g 本期嘉宾为微软技术中心技术 ...

  3. Entity Framework Core 1.1 升级通告

    原文地址:https://blogs.msdn.microsoft.com/dotnet/2016/11/16/announcing-entity-framework-core-1-1/ 翻译:杨晓东 ...

  4. ASP.NET 5 RC1 升级 ASP.NET Core 1.0 RC2 记录

    升级文档: Migrating from DNX to .NET Core Migrating from ASP.NET 5 RC1 to ASP.NET Core 1.0 RC2 Migrating ...

  5. SQL Server2016升级前几点自检

    SQL Server2016已经出来一段时间了,而且最新的SP1包也于2016年11月18日正式发布,各种新的特性推出让我们跃跃欲试.那么对于我们真实的业务环境,特别是生产环境要不要"跟风& ...

  6. 如何安全的将VMware vCenter Server使用的SQL Server Express数据库平滑升级到完整版

    背景: 由于建设初期使用的vSphere vCenter for Windows版,其中安装自动化过程中会使用SQL Server Express的免费版数据库进行基础环境构建.而此时随着业务量的增加 ...

  7. Linux平台 Oracle 10gR2(10.2.0.5)RAC安装 Part2:clusterware安装和升级

    Linux平台 Oracle 10gR2(10.2.0.5)RAC安装 Part2:clusterware安装和升级 环境:OEL 5.7 + Oracle 10.2.0.5 RAC 3.安装Clus ...

  8. 升级npm

    查看npm的所有版本 运行命令: npm view npm versions 命令运行后,会输出到目前为止npm的所有版本. [ '1.1.25', '1.1.70', '1.1.71', '1.2. ...

  9. iOS开发 判断当前APP版本和升级

    从iOS8系统开始,用户可以在设置里面设置在WiFi环境下,自动更新安装的App.此功能大大方便了用户,但是一些用户没有开启此项功能,因此还是需要在程序里面提示用户的 方法一:在服务器接口约定对应的数 ...

  10. AEAI DP V3.6.0 升级说明,开源综合应用开发平台

    AEAI DP综合应用开发平台是一款扩展开发工具,专门用于开发MIS类的Java Web应用,本次发版的AEAI DP_v3.6.0版本为AEAI DP _v3.5.0版本的升级版本,该产品现已开源并 ...

随机推荐

  1. linQ学习笔记之三高级语句

    linq语句查询执行的时机 第一步获取数据源 int [] obejct = new int[]{1,2,3,4,5,6,7,8,9} 第二步定义查询 var even = numbers.where ...

  2. oracle 学习笔记(三)

    1. SQL(基础查询) 1.1. 基本查询语句 1.1.1. FROM子句 SQL查询语句的语法如下:   SELECT <*, column [alias], -> FROM tabl ...

  3. Debian8.3安装flash插件,备用~~~

    debian的浏览器iceweasel默认没有安装flash播放器,flash player这坨shit,容易使浏览器崩溃,但看在线视频又不得不用这货. 有两种安装方法: 一.安装压缩包 1.先去官网 ...

  4. 【安装Redis】CentOS7 下安装NodeJs+Express+MongoDB+Redis

    Redis,V3.2,官网l官方链接:http://www.redis.io/download,参考:http://blog.csdn.net/mlks_2008/article/details/19 ...

  5. java项目上线过程

    关于如何将Javaweb上线,部署到公网,让全世界的人都可以访问的问题.小编将作出系列化,完整的流程介绍. 1.在myeclipse中开发好项目,打包成war格式,不会的同学参考以下 http://z ...

  6. 等差数列(bzoj 3357)

    Description     约翰发现奶牛经常排成等差数列的号码.他看到五头牛排成这样的序号:"1,4,3,5,7" 很容易看出"1,3,5,7"是等差数列. ...

  7. Invoke的使用情景

    直接看代码: using System; using System.Collections.Generic; using System.ComponentModel; using System.Dat ...

  8. js如何求一组数中的极值

    这是一个很简单的问题,现在我们从循环开始,例如一组数[5,2,1,3,4];求其中的最大值,那么首先我们要定义一个max的中间变量,遍历数组,当遇到比max值大则赋值给max,直到循环结束,就能获取这 ...

  9. 发布报错:Error ITMS-90635 - Invalid Mach-O in bundle - submitting to App store

    发布报错:Error ITMS-90635 - Invalid Mach-O in bundle - submitting to App store 昨晚上传项目到AppStore,报了这个错,纳尼! ...

  10. Linux正则表达式

    正则表达示的组成: 一般字符:没有特殊意义的字符 特殊字符(meta字符):元字符,有在正则表达式中有特殊意义 正则表达式中常见的meta字符 POSIX BRE与ERE中都有的meta字符 \ 通常 ...