C和C++

C主要是应用在在驱动层,是面向过程的编程语言,对类型的定义不是很严格。C++主要是应用与应用层,是C语言的一个加强版,可以完全兼容C语言,并且还有很多C语言不具备的特性,如,C++是一种面向对象的编程语言,C++的设计目标是:运行效率和开发效率的统一

  • C++更加强调语言的实用性,可以在任意地方声明变量
  • C++中的register只是起到兼容性的作用
  • C++中的编译器能够更好的进行优化

struct关键字的加强:

C

typedef struct _tag_student Student;

struct _tag_student

{

const char* name;

int age;

}

C++

struct Student

{

const char* name;

int age;

};

int f() 和int f(void)有什么区别

注意:C++中的所有的表示符都必须显示的声明类型,不允许默认类型的出现,但是在C语言中可以

C++中:

  • int f()和int f(void)表示的是相同的意思,指的是定义了一个返回值是int的无参数的函数

C中: (在C中默认的参数类型和函数返回值类型都是int)

  • int f() 指的是定义了一个返回值为int 函数参数个数为任意多个的函数
  • int f(void) 指的是定义了一个返回值为int类型的无参数的函数

C和C++中的const的分析:

C

  • 修饰的变量是只读,本质还是变量
  • 修饰的局部变量在栈上分配空间
  • 修饰的全局变量在只读存储区分配空间
  • 只在编译期有用,其他时间没用
  • 注意:const修饰的变量不是真的常量,他只是告诉编译器该变量不能出现在赋值符号的左边

C++

  • 当碰到const标识符时,在符号表中放入常量
  • 编译过程中若发现使用常量,则直接以符号表中的常量进行替换
  • 编译过程中若发现下述情况,则给对应常量分配内存空间
    • 对const常量使用了extern
    • 对const常量使用了&操作符
  • C++编译器虽然可能给const常量分配空间但是不会使用其存储空间中的值

小结:

  • 与C语言不同,C++中的const不是只读变量
  • C++中的const是一个真正意义上的常量
  • C++编译器可能会为const常量分配空间
  • C++完全兼容C语言中const常量的语法特性

随机推荐

  1. [转]Android开源项目收藏分享

    转自:http://blog.csdn.net/dianyueneo/article/details/40683285 Android开源项目分类汇总 如果你也对开源实现库的实现原理感兴趣,欢迎 St ...

  2. hdu-5475 An easy problem---线段树+取模

    题目链接: http://acm.hdu.edu.cn/showproblem.php?pid=5475 题目大意: 给X赋初值1,然后给Q个操作,每个操作对应一个整数M: 如果操作是1则将X乘以对应 ...

  3. poj 3253 Fence Repair (STL优先队列)

    版权声明:本文为博主原创文章,未经博主同意不得转载. vasttian https://blog.csdn.net/u012860063/article/details/34805369 转载请注明出 ...

  4. Javascript 中 Array的 sort()和 compare()方法

    Javascript 中 Array的 sort()方法其实是把要排序的内容转化为string(调用 toString()), 然后按照字符串的第一位 ascii 码先后顺序进行比较,不是数字. 我们 ...

  5. linux内核自己添加模块(内核版本:3.0.101)

    做内核驱动第一步都是学习如何添加模块,这是基础,有了这个基础,剩下就是写代码了. 由于2.4到2.6内核版本的更新,无论是系统调用还是模块添加机制都有了巨大的变化,本人也因此饱经挫折,最后在3.0.1 ...

  6. github commit 报错:error: failed to push some refs to 'https:'错误解决方法

    为什么会出现这个问题呢? 因为我在github中删除了一个文件readme.txt,但是本地并不知道我删除了readme.txt,本地中还保存了readme.txt文件,导致了云端的文件,和本地的文件 ...

  7. Stack栈 Heap堆

    Stack(栈) 栈(stack) 又名堆栈,它是一种运算受限的线性表.其限制是仅允许在表的一端进行插入和删除运算.这一端被称为栈顶,相对地,把另一端称为栈底.向一个栈插入新元素又称作进栈.入栈或压栈 ...

  8. 解决SVN UUID客户端和服务器不一致的问题

    下面是从别的文章中COPY过来的两篇文章,可以完美的解决这个问题: 一. 重新定位SVN的时候,遇到uuid不一致的问题. Google得知可以使用以下命令 有到svnadmin命令:(位于 SVN安 ...

  9. STM32F103 ucLinux开发之四(内核启动后的调试)

    Stm32-uclinux启动后的调试 1.  修改__pfn_to_page使得能够启动 根据STM32F103 ucLinux开发之三(内核启动后不正常)的描述,内核无法启动是选择了平板内存模式后 ...

  10. 时钟晶振32.768KHz为什么是15分频?

    实时时钟晶振为什么选择是32768Hz的晶振,在百度上搜索的话大部分的答案都是说2的15次方是32768,使用这个频率的晶振,人们可以很容易的通过分频电路得到1Hz的计时脉冲.但是话有说回来了,2的整 ...