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. 《你说对就队》第八次团队作业:Alpha冲刺 第五天

    <你说对就队>第八次团队作业:Alpha冲刺 第五天 项目 内容 这个作业属于哪个课程 [教师博客主页链接] 这个作业的要求在哪里 [作业链接地址] 团队名称 <你说对就队> ...

  2. 优雅到骨子里的Requests

    例子与特性 可以说Requests最大的特性就是其风格的简单直接优雅.无论是请求方法,还是响应结果的处理,还有cookies,url参数,post提交数据,都体现出了这种风格. 以下是一个简单例子: ...

  3. 【codeforces 796C】Bank Hacking

    [题目链接]:http://codeforces.com/contest/796/problem/C [题意] 给你n个节点,你一开始选择一个节点,然后打掉它,然后与被打掉过的节点相连的节点才能被 打 ...

  4. js判断object的具体类型(或者说判断object的类class)

    The JavaScript specification gives exactly one proper way to determine the class of an object: Objec ...

  5. iOS 代码方式设置按钮标题、图片的偏移

    button.imageEdgeInsets = UIEdgeInsetsMake(0,1 , 2, 3); button.titleEdgeInsets = UIEdgeInsetsMake(0,1 ...

  6. 【IOS 开发】Object - C 入门 之 数据类型具体解释

    作者 : 韩曙亮 转载请注明出处 : http://blog.csdn.net/shulianghan/article/details/38544659 1. 数据类型简单介绍及输出 (1) 数据类型 ...

  7. 一条SQL语句求前面记录的平均值

    有算法要求如下: For (i=1,i<=10,i++) { ta[i] = (t[1] + t[2] + ... + t[i]) / i; } 用一条SQL语句实现它: 分别用表变量 @ta ...

  8. 洛谷 P2668 & P2540 [ noip 2015 ] 斗地主 —— 搜索+贪心

    题目:https://www.luogu.org/problemnew/show/P2668   https://www.luogu.org/problemnew/show/P2540 首先,如果没有 ...

  9. [Apple开发者帐户帮助]六、配置应用服务(2)创建DeviceCheck私钥

    要验证与DeviceCheck服务的通信,您将使用启用了DeviceCheck的私钥. 首先创建并下载启用了DeviceCheck 的私钥.然后获取密钥标识符(kid)以创建JSON Web令牌(JW ...

  10. selenium3 + python - cookie定位

    from selenium import webdriverfrom selenium.webdriver.support.wait import WebDriverWaitimport time d ...