• 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. ng-repeat里创建的自定义指令

    在ng里,所有的指令在按照意愿正常工作之前的都需要编译一下,包含angularJS的自定义指令. ng模板里的所有指令都会在angularJS加载完毕之后编译一下,所以那些自定义指令和事件才能工作. ...

  2. BZOJ 4184: shallot

    Description 在某时刻加入或删除一个点,问每个时刻的集合中能异或出来的最大值是多少. Sol 线段树+按时间分治+线性基. 按时间分治可以用 \(logn\) 的时间来换取不进行删除的操作. ...

  3. Ubuntu Server 14.04 --secure-file-priv error in MySql 解决方案

    在VPS部署Ubuntu 14.04服务器时,MySQL执行导出文件命令,报错: The MySQL server is running with the --secure-file-priv opt ...

  4. xamarin android webview XHR错误

    Cross origin requests are only supported for protocol schemes MLHttpRequest cannot load file:///F:/G ...

  5. 《转载》使用org.w3c.dom.Element的setTextContent()、getTextContent()方法时出现编译错误

    今天在更新项目后进行编译时,出现如下错误一堆: 编译错误 Google之,在stackoverflow上看到如下的解决方法: I came here with the same problem. Ev ...

  6. gradle

    http://examples.javacodegeeks.com/core-java/gradle/gradle-hello-world-tutorial/

  7. ACM/ICPC 之 三维计算几何+暴力枚举+判重(HDU5839)

    CCPC网赛第八题,求立体几何数量,题解见注释 //立体几何-求满足要求的四面体个数 //要求1:至少4条边相等 //要求2:四条边相等时,另两条边一定不相邻(即对边) //题解:以当前边为不相邻的其 ...

  8. Ubuntu 安装php+mysql 环境

    新系统安装完毕后,首先运行apt-get update 更新apt库. 然后安装ssh,输入apt-get install openssh-server,安装ssh是为了可以远程操作,不然坐在机房实在 ...

  9. vue2.0 组件之间的数据传递

    组件间的数据传递// 父组件<template><div class="order"><dialog-addpro v-on:closedialog= ...

  10. C#事件的理解应用

    之前对C#的事件理解的不够透彻,总是感觉在实际应用上差一些火候.最近写character类的相关内容,有了一些理解,在这里分享一下. &感觉大神没必要往下看了 下面开始正式内容: 比如说,角色 ...