1、 C+关键词asmautobad_castbad_typeidboolbreakcasecatchcharclassconstconst_castcontinuedefaultdeletedodoubledynamic_castelseenumexceptexplicitexternfalsefinallyfloatforfriendgotoifinlineintlongmutablenamespacenewoperatorprivateprotectedpublicregisterreinterpret_castreturnshortsignedsizeofstaticstatic_cast
2、structswitchtemplatethisthrowtruetrytype_infotypedeftypeidtypenameunionunsignedusingvirtualvoidvolatilewchar_t while(1)asmasm 已经被_asm 替代了, 用于汇编语言嵌入在 C/C+程序里编程,从而在某些方面优化代码.虽然用 asm 关键词编译时编译器不会报错,但是 asm 模块的代码是没有意义的.(2)auto 这个这个关键词用于声明变量的生存期为自动,即将不在任何类、结构、枚举、联合和函数中定义的变量视为全局变量,而在函数中定义的变量视为局部变量。这个关键词不怎么多写
3、,因为所有的变量默认就是 auto 的。(3)bad_cast,const_cast,dynamic_cast,reinterpret_cast,static_cast关于异常处理的,还不是太了解 (4)bad_typeid也是用于异常处理的,当 typeid 操作符的操作数 typeid 为 Null 指针时抛出.(5)bool不用多说了吧,声明布尔类型 的变量或函数.(6)break跳出当前循环.The break statement terminates the execution of the nearest enclosing loop or conditional statemen
4、t in which it appears. (7)caseswitch 语句分支.Labels that appear after the case keyword cannot also appear outside a switch statement. (8)catch,throw,try都是异常处理的语句,The try, throw, and catch statements implement exception handling.(9)char声明字符型变量或函数.(10)class声明或定义类或者类的对象.The class keyword declares a class
5、type or defines an object of a class type.(11)const被 const 修饰的东西都受到强制保护,可以预防意外的变动,能提高程序的健壮性。它可以修饰函数的参数、返回值,甚至函数的定义体。 作用: 1.修饰输入参数 a.对于非内部数据类型的输入参数,应该将“值传递”的方式改为“const 引用传递 ”,目的是提高效率。例如将 void Func(A a) 改为 void Func(const A 如下语句将出现编译错误: char *str = GetString();/cannot convert from const char * to char
6、 *; 正确的用法是: const char *str = GetString(); b.如果函数返回值采用“值传递方式” ,由于函数会把返回值复制到外部临时的存储单元中,加 const 修饰没有任何价值。 如不要把函数 int GetInt(void) 写成 const int GetInt(void)。 3.const 成员函数的声明中,const 关键词只能放在函数声明的尾部, 表示该类成员不修改对象. 说明: const type m; /修饰 m 为不可改变 示例: typedef char * pStr; /新的类型 pStr; char string4 = “abc“; cons
7、t char *p1 = string; p1+; /正确,上边修饰的是*p1,p1 可变 const pStr p2 = string; p2+; /错误,上边修饰的是 p2,p2 不可变,*p2 可变 同理,const 修饰指针时用此原则判断就不会混淆了。 const int *value; /*value 不可变,value 可变 int* const value; /value 不可变,*value 可变 const (int *) value; /(int *)是一种 type,value 不可变,*value 可变 /逻辑上这样理解,编译不能通过,需要 tydef int* New
8、Type; const int* const value;/*value,value 都不可变(12)continue结束当前循环,开始下一轮循环.Forces transfer of control to the controlling expression of the smallest enclosing do, for, or while loop. (13)defaultswitch 语句中的默认分支.None of the constants match the constants in the case labels; a default label is present.Con
9、trol is transferred to the default label.(14)delete经常用于动态内存分配的语句,Deallocates a block of memory. (15)do在 do-while 循环结构中开始循环体.Executes a statement repeatedly until the specified termination condition (the expression) evaluates to zero.(16)double声明双精度变量或函数.(17)else条件语句否定分支(与 if 连用).(18)enum声明枚举类型.The n
10、ame of each enumerator is treated as a constant and must be unique within the scope where the enum is defined. (19)explicitexplicit 主要用于 “修饰 “构造函数,使得它不用于程序中需要通过此构造函数进行 “隐式 “转换的情况,防止不必要的隐式转化.;指定此关键字,需要隐式转换方可进行的程序将会不能通过. 而可通过强制转换使它没有用.This keyword is a declaration specifier that can only be applied to
11、 in-class constructor declarations. An explicit constructor cannot take part in implicit conversions. It can only be used to explicitly construct an object. (20)exportMSDN 只说 The export keyword is not supported on templates.一种导出语句吧(21)externextern 意为“外来的”它的作用在于告诉编译器:有这个变量,它可能不存在当前的檔中,但它肯定要存在于工程中的某一个
12、源文件中或者一个 Dll 的输出中。声明变量是在其它文件中声明(也可以看做是引用变量).Objects and variables declared as extern declare an object that is defined in another translation unit or in an enclosing scope as having external linkage.(22)false, truebool 类型的两个枚举值.(23)float声明浮点型变量或函数.(24)for一种循环语句(可意会不可言传).Use the for statement to cons
13、truct loops that must execute a specified number of times.(25)friend声明友元函数或者类.The friend keyword allows a function or class to gain access to the private and protected members of a class. (26)goto无条件跳转语句.Performs an unconditional transfer of control to the named label. (27)if条件语句.Controls conditiona
14、l branching. 常与 else 一起用.(28)inline声明定义内联函数,编译时将所调用的代码嵌入到主函数中.The inline specifiers instruct the compiler to insert a copy of the function body into each place the function is called.(29)int声明整型变量或函数.(30)long声明长整型变量或函数.(31)mutablemutalbe 的中文意思是“可变的,易变的 ”,跟 constant(既 C+中的 const)是反义词。在 C+中,mutable 也是
15、为了突破 const 的限制而设置的。被 mutable 修饰的变量,将永远处于可变的状态,即使在一个 const 函数中。如果类的成员函数不会改变对象的状态,那么这个成员函数一般会声明成 const 的。但是,有些时候,我们需要在 const 的函数里面修改一些跟类状态无关的数据成员,那么这个数据成员就应该被 mutalbe 来修饰。This keyword can only be applied to non-static and non-const data members of a class. If a data member is declared mutable, then it
16、 is legal to assign a value to this data member from a const member function.(32) namespace如 同 名 字 一 样 的 意 思 ,NameSpace:名 字 空 间 ,之 所 以 出 来 这 样 一 个 东 西 ,是 因 为 人类 可 用 的 单 词 数 太 少 ,并 且 不 同 的 人 写 的 程 序 不 可 能 所 有 的 变 量 都 没 有 重 名 现 象 ,对 于库 来 说 ,这 个 问 题 尤 其 严 重 ,如 果 两 个 人 写 的 库 文 件 中 出 现 同 名 的 变 量 或 函 数 (不
17、 可 避 免 ),使 用 起 来 就 有 问 题 了 ,为 了 解 决 这 个 问 题 ,引 入 了 名 字 空 间 这 个 概 念 ,通 过 使 用 namespace xxx;你 所 使 用 的 库 函 数 或 变 量 就 是 在 该 名 字 空 间 中 定 义 的 .这 样 一 来 就 不 会引 起 不 必 要 的 冲 突 了 .命 名 空 间 是 用 来 组 织 和 重 用 代 码 的 编 译 单 元 。所谓 namespace,是指标识符的各种可见范围。C+标准程序库中的所有标识符都被定义于一个名为 std 的 namespace 中。 一 :和格式不一样,前者没有后缀,实际上,在你
18、的编译器 include 文件夹里面可以看到,二者是两个文件,打开文件就会发现,里面的代码是不一样的。后缀为.h 的头文件 c+标准已经明确提出不支持了,早些的实现将标准库功能定义在全局空间里,声明在带.h 后缀的头文件里,c+标准为了和 C 区别开,也为了正确使用命名空间,规定头文件不使用后缀.h。 因此,当使用时,相当于在 c 中调用库函数,使用的是全局命名空间,也就是早期的 c+实现;当使用的时候,该头文件没有定义全局命名空间,必须使用 namespace std;这样才能正确使用 cout。 二: 所谓 namespace,是指标识符的各种可见范围。 C+标准程序库中的所有标识符都被定
19、义于一个名为 std 的 namespace 中。 由于 namespace 的概念,使用 C+标准程序库的任何标识符时,可以有三种选择: 1、直接指定标识符。例如 std:ostream 而不是 ostream。完整语句如下:std:cout 可以包含基本数据类型可以包含类类型.函数模板的一般形式如下:Template 模板定义:模板就是实现代码重用机制的一种工具,它可以实现类型参数化,即把类型定义为参数, 从而实现了真正的代码可重用性。模版可以分为两类,一个是函数模版,另外一个是类模版。The template declaration specifies a set of paramete
20、rized classes or functions. (46)this一 个 对 象 的 this 指 针 并 不 是 对 象 本 身 的 一 部 分 , 不 会 影 响 sizeof(对 象 )的 结 果 。 this作 用 域 是 在 类 内 部 , 当 在 类 的 非 静 态 成 员 函 数 中 访 问 类 的 非 静 态 成 员 的 时 候 , 编 译器 会 自 动 将 对 象 本 身 的 地 址 作 为 一 个 隐 含 参 数 传 递 给 函 数 。 也 就 是 说 , 即 使 你 没 有 写上 this 指 针 , 编 译 器 在 编 译 的 时 候 也 是 加 上 this 的
21、 , 它 作 为 非 静 态 成 员 函 数 的 隐 含 形参 , 对 各 成 员 的 访 问 均 通 过 this 进 行 。this 指 针 存 在 于 类 的 成 员 函 数 中 ,指 向 被 调 用 函 数 所 在 的 类 实 例 的 地 址 。一 种 情 况 就 是 , 在 类 的 非 静 态 成 员 函 数 中 返 回 类 对 象 本 身 的 时 候 , 直 接 使 用 return *this; 另 外 一 种 情 况 是 当 参 数 与 成 员 变 量 名 相 同 时 , 如 this-n = n ( 不 能 写 成 n = n) 。The this pointer is a
22、pointer accessible only within the nonstatic member functions of a class, struct, or union type. (47)typedef用以给数据类型取别名.Introduces a name that, within its scope, becomes a synonym for the type given by the type-declaration portion of the declaration.(48)typeidtypeid is used to get the Type for a type
23、 at compile time.标准 C+的一个新特征是 RTTI(Run-Time Type Information 运行时类型信息) ,它为程序在运行时确定对象类型,提供了一种标准方法。在标准 C+中,有三个支持RTTI 的元素:1、关键字 dynamic_cast(动态强制转换):操作符 dynamic_cast 将一个指向基类的指针转换为一个指向派生类的指针(如果不能正确转换,则返回 0空指针) ,格式为 dynamic_cast ( exdivssion )dynamic_cast 在转化过程中要用到相关类的类型信息类 type_info 中的信息。2、关键字 typeid(类型标
24、识符):用来检测指针类型(返回 type_info 类对象的指针) ,格式为 typeid ( exdivssion ) 或 typeid ( type-id) 其中,exdivssion 为结果为对象的表达式,type-id 为类名。3、类 type_info(类型信息):存储特定类型的有关信息,定义在头文件中。type_info 类的具体内容由编译器实现来决定,但是至少必须包含返回字符串的name()成员函数。(49)typenameTells the compiler that an unknown identifier is a type.Use this keyword only i
25、n template definitions.在下面的 template declarations(模板声明)中 class 和 typename 有什么不同?template class Widget; / uses “class“template class Widget; / uses “typename“答案:没什么不同。在声明一个 template type parameter(模板类型参数)的时候,class 和 typename 意味着完全相同的东西。一些程序员更喜欢在所有的时间都用 class,因为它更容易输入。其他人(包括我本人)更喜欢 typename,因为它暗示着这个参数
26、不必要是一个 class type(类类型) 。少数开发者在任何类型都被允许的时候使用 typename,而把 class 保留给仅接受 user-defined types(用户定义类型)的场合。但是从 C+ 的观点看,class 和 typename 在声明一个 template parameter(模板参数)时意味着完全相同的东西。然而,C+ 并不总是把 class 和 typename 视为等同的东西。有时你必须使用 typename。为了理解这一点,我们不得不讨论你会在一个 template(模板)中涉及到的两种名字。(50)union声明联合数据类型.A union is a us
27、er-defined data or class type that, at any given time, contains only one object from its list of members (although that object can be an array or a class type).(51)usingThe using declaration introduces a name into the declarative region in which the using declaration appears.using 关键字有两个主要用途:1、作为指令,
28、用于为命名空间创建别名或导入其他命名空间中定义的类型。 2、作为语句,用于定义一个范围,在此范围的末尾将释放对象。(52)virtual声明虚基类或虚函数.The virtual keyword declares a virtual function or a virtual base class.(53)void声明函数无返回值或无参数,声明无类型指针.When used as a function return type, the void keyword specifies that the function does not return a value. When used for
29、a functions parameter list, void specifies that the function takes no parameters. When used in the declaration of a pointer, void specifies that the pointer is “universal.“(54)volatile 说明变量在程序执行中可被隐含地改变,表明某个变量的值可能在外部被改变,优化器在用到这个变量时必须每次都小心地重新读取这个变量的值,而不是使用保存在寄存器里的备份。The volatile keyword is a type qualifier used to declare that an object can be modified in the program by something such as the operating system, the hardware, or a concurrently executing thread.(55) wchar_t宽字.(56)while循环语句的循环条件