1. static关键字

作用

  1. 在函数体内静态变量具有记忆功能。在函数体内定义的静态变量离开时不会被清除,在下次函数调用的时候其值保持不变。
  2. 限制变量或函数的使用范围。static修饰的全局变量或者函数只能在本文件中被使用,不能被外部函数使用。
  3. static变量与普通变量的区别在于它只会被初始化一次,下次使用的时候仍然保留之前的值。
  4. 在类中使用static。static成员是类的一部分,在一个程序中只有一个实体,不存在与对象中。
  5. static成员存储于程序静态存储区,定义时要分配空间,所以不能在类中初始化。在类外初始化是不需要带上static关键字。

    优点

  6. static变量不占用全局命名空间
  7. 可以实现数据隐藏。static变量可以声明为private的,而全局变量不能。
  8. 类中的静态成员可以为所有的对象所使用。

    注意事项

  9. 普通成员函数隐含this指针,而静态成员函数没有,因此它只能调用类中的静态成员函数。
  10. 如果在头文件中定义了静态对象,会在所有#include的源文件拷贝一份相同的对象,造成资源的浪费。

    2. const关键字

    作用

  11. 定义const常量,具有不可变性。
  12. 保护被修饰的对象不可被修改。
  13. 节省空间,避免不必要的空间浪费(相对于#define来说)。
  14. 提高了程序的效率,const对象保存在符号表中,使它成为一个编译期的常量,避免了内存操作。

    注意事项

  15. C++中临时对象是const类型的,如字符串常量。

    3. volatile关键字

    作用

    避免编译器优化出现的问题。有时候编译器对某一个对象的读取优化为直接读取寄存器,而不是通过访问内存来提升速度。因此在多线程编程之中,变量的值可能被别的线程修改了,而寄存器中的值没有改变,从而造成读取的值和实际的值不一致的问题。因此被volatile关键字修饰的变量,系统每次用它的时候强制从内存中读取。

    4. 枚举变量的值

    在枚举中,某个枚举变量的值默认为前一个变量的值加1,如果第一个枚举变量没有被赋值,则其值默认为0.并且枚举变量的值是可以重复的。

    4. 左值和右值

    定义

    左值就是可以出现在表达式等号左边的值,它是存储值的那块内存的地址,也称为变量的地址,可以被改变。右值是指存储在某内存地址中的数据,也称为变量的数据。左值可以为右值,但右值不可以为左值。

    例子

    ++i表示取a的地址,对它的内容进行+1操作,然后把+1后的值放在寄存器中,它可以被当做左值来使用。i++表示取a的地址,把它的值放在寄存器中,然后对内存中a的值进行+1操作,不能当作左值来使用。i++的运算结果并不是i这个变量的引用,而是一个值为i的临时变量,编译器不允许对一个临时变量重新赋值。

    5. new/delete与malloc/free

  16. new/delete是C语言标准库函数,malloc/free是C++运算符。
  17. new能自动计算对象的内存空间,malloc不能。
  18. new/delete是类型安全的,malloc/free不是
  19. new/delete可以自动调用构造和析构函数,malloc/free不能。

    6. 引用作为返回值

    优点

    在内存中不产生被返回值对象的副本,提升程序的效率与安全性。

    注意事项

  20. 不能返回局部变量的引用。
  21. 不能返回函数内部new出来的对象的引用,因为返回的实际上是一个临时的对象,它无法被释放,造成内存泄露。
  22. 返回类的引用最好用const修饰。

C/C++关键字的更多相关文章

  1. 作为一个新手的Oracle(DBA)学习笔记【转】

    一.Oracle的使用 1).启动 *DQL:数据查询语言 *DML:数据操作语言 *DDL:数据定义语言 DCL:数据控制语言 TPL:事务处理语言 CCL:指针控制语言 1.登录 Win+R—cm ...

  2. JavaScript var关键字、变量的状态、异常处理、命名规范等介绍

    本篇主要介绍var关键字.变量的undefined和null状态.异常处理.命名规范. 目录 1. var 关键字:介绍var关键字的使用. 2. 变量的状态:介绍变量的未定义.已定义未赋值.已定义已 ...

  3. java面向对象中的关键字

    1,super关键字 super:父类的意思 1. super.属性名 (调用父类的属性) 2. super.方法名 (调用父类的方法) 3. super([参数列表])(调用父类的构造方法) 注意: ...

  4. 关于javascript中的this关键字

    this是非常强大的一个关键字,但是如果你不了解它,可能很难正确的使用它. 下面我解释一下如果在事件处理中使用this. 首先我们讨论一下下面这个函数中的this关联到什么. function doS ...

  5. transient关键字的用法

    本篇博客转自 一直在路上 Java transient关键字使用小记 1. transient的作用及使用方法 我们都知道一个对象只要实现了Serilizable接口,这个对象就可以被序列化,Java ...

  6. Java关键字:static

    通常,当创建类时,就是在描述那个类的外观和行为.只有用new创建类的对象时,才分配数据存储空间,方法才能被调用.但往往我们会有下面两种需求: 1.我想要这样一个存储空间:不管创建多少对象,无论是不创建 ...

  7. Core Java 总结(关键字,特性问题)

    2016-10-19 说说&和&&的区别 初级问题,但是还是加入了笔记,因为得满分不容易. &和&&都可以用作逻辑与的运算(两边是boolean类型), ...

  8. Net中的常见的关键字

    Net中的关键字有很多,我们最常见的就有new.base.this.using.class.struct.abstract.interface.is.as等等.有很多的,在这里就介绍大家常见的,并且有 ...

  9. php多关键字查询

      php单一关键字查询 <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 tdansitional//EN" "http: ...

  10. Keil> 编译器特有的功能 > 关键字和运算符 > __weak

    __weak 此关键字指示编译器弱导出符号. 可以将 __weak 关键字应用于函数和变量声明以及函数定义. 用法 函数和变量声明 对于声明,此存储类指定一个 extern 对象声明,即使不存在,也不 ...

随机推荐

  1. 创建RpcEnv

    感觉这篇文章不错 2.1.2.创建RpcEnv -  RpcEndpoint -  RpcEndpointRef val systemName = if (isDriver) driverSystem ...

  2. C/C++中的64位整数

    C/C++中的64位整数(__int64 and long long) 在做ACM题时,经常都会遇到一些比较大的整数.而常用的内置整数类型常常显得太小了:其中long 和 int 范围是[-2^31, ...

  3. hdu_1061_Rightmost Digit_201311071851

    Rightmost Digit Time Limit: 2000/1000 MS (Java/Others)    Memory Limit: 65536/32768 K (Java/Others) ...

  4. 认识GIT之入门

    前言 GIT是非常优秀的源代码版本管理工具,经过几年的发展,已经变得非常成熟以及流行,不同于其他的源代码管理系统,值得使用.GIT官网下载在线安装包,经常会中途退出,很有可能的原因是被墙了,所以建议使 ...

  5. [React Testing] Confidently Ship Production React Apps

    We want to make sure that when we ship new code, our users can use the application. The best way we' ...

  6. 计算几何 二维凸包问题 Andrew算法

    凸包:把给定点包围在内部的.面积最小的凸多边形. Andrew算法是Graham算法的变种,速度更快稳定性也更好. 首先把全部点排序.依照第一keywordx第二keywordy从小到大排序,删除反复 ...

  7. Corona 不同设备分辨率适应

    移动平台下,不同设备的宽高比不同,那么必然存在与游戏设计时的宽高比不一致的情况,Corona的解决方案是定义了一个虚拟的屏幕高宽,比如1024*768,然后在不同设备上通过定义的适应模式去调整这个虚拟 ...

  8. ant+jmeter 报告优化

    环境基础:ant+jmeter+java +jmeter脚本 1.将 JMeter的extras目录中ant-jmeter-1.1.1.jar包拷贝至ant安装目录下的lib目录中 2.修改JMete ...

  9. ExtJs 给grid某一单元格重新赋值

    // 司机,搬运工提成 var commissionMoney = (waybillsFtQty * commissionMoneyRatio / personCount).toFixed(2); / ...

  10. CentOS-6.5安装配置Tomcat-7

    https://my.oschina.net/u/593517/blog/304483 http://blog.csdn.net/lgh0824/article/details/51194116 摘要 ...