• 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. XCode8向ITunes提交版本,不显示或提示无效的版本

    主要是iOS10,对隐私权限有了新的要求.在info.plist里加入如下代码. <key>NSCameraUsageDescription</key> <string& ...

  2. web前端页面性能优化

    影响用户访问的最大部分是前端的页面.网站的划分一般为二:前端和后台.我们可以理解成后台是用来实现网站的功能的,比如:实现用户注册,用户能够为文章发表评论等等.而前端呢?其实应该是属于功能的表现. 而我 ...

  3. 【svn】SSL error: A TLS warning alert has been received的解决方法

    第一次用svn(>_<),结果在运行下面语句时,svn很不友好的报错了..... svn co http:10.11.12.13/test1/test2 . 报错信息: svn: OPTI ...

  4. WIN7凭据管理器保存的凭据过段时间会自动删除的解决办法

    控制面板\用户帐户和家庭安全\凭据管理器 进入该页面可看到所有凭据

  5. js将多个方法添加到window对象上的多种方法

    方法一:(最简单也是最笨的方法) window.a = function(){}window.b = function(){}window.c = function(){} 方法二:(利用jq的ext ...

  6. 3ds max 渲染清晰面片的边缘

    3ds max的菜单栏 -> 渲染 -> 材质编辑器->精简材质编辑器,将面状打勾,如下图,就能渲染出面片清晰的图形.

  7. MySQL 5.7 安装教程

    自序:最近又要重新用上Mysql,在有道笔记找了以前自己记录怎么安装mysql5.7的笔记,发现那个时候记得笔记比较随意,看的比较费劲,现在决定重新在博客记录一下,以便以后自己查阅的时候更加方便. 1 ...

  8. 【用xocde5打包 在IOS7以下也能显示无默认gloss 效果 图解】

    图解,只需要这几个地方修改以下就好了,看不懂的话,请留言 完毕:记着clean 以下项目文件

  9. Lintcode 102.带环链表

    ------------------------ 只要设置两个指针,称为快慢指针,当链表没有环的时候快指针会走到null,当链表有环的时候快指针早晚会追上慢指针的. AC代码: /** * Defin ...

  10. MD5 加密

    字符串加密 // 1. 准备好一个字符串 NSString *string = @"asdasfaf"; // 2. MD5加密是基于C语言的. 所以要把这个字符串转化成C的字符串 ...