1. 关键字缩写
RVO | return value optimizer |
NRVO | named return value optimizer |
RAII | Resource Acquisition Is Initialization |
SFINAE | Substitution Failure Is Not An Error |
2. #pragma pack
自然对界是指按结构体的成员中size最大的成员对齐。
#pragma pack 规定的对齐长度,实际使用的规则是:
结构,联合,或者类的数据成员,第一个放在偏移为 0 的地方,以后每个数据成员的对齐,按照 #pragma pack 指定的数值和结构体的自然对齐长度中比较小的那个进行。
也就是说,当 #pragma pack 的值等于或超过所有数据成员长度的时候,这个值的大小将不产生任何效果。
结构体的对齐,按照结构体中size最大的数据成员和 #pragma pack 指定值之间,较小的那个进行。
3. extern "C''
extern "C'' 的主要作用就是为了能够正确实现 C++ 代码调用其他C语言代码。加上 extern "C'' 后,会指示编译器这部分代码按 C 语言的进行编译,而不是 C++ 的。由于 C++ 支持函数重载,因此编译器编译函数的过程中会将函数的参数类型也加到编译后的代码中,而不仅仅是函数名;而 C 语言并不支持函数重载,因此编译 C 语言代码的函数时不会带上函数的参数类型,一般只包括函数名。
4. dllimport dllexport
可以使用 dllimport 或 dllexport 特性来声明 C++ 类。 这些形式表示已导入或导出整个类。 以这种方式导出的类称为可导出类。
5. 预定义符号
./ | 表示当前目录 |
../ | 表示上级目录 |
../../ | 表示上上级目录 |
__FILE__ | 当前源代码文件名(完整路径) |
__FUNCTION__ | 当前源代码函数名 |
__LINE__ | 当前源代码行号 |
__DATE__ | 当前编译日期 |
__TIME__ | 当前编译时间 |
__TIMESTAMP__ | 当前系统时间戳 |
__STDC__ | 当要求程序严格遵循ANSIC标准时该标识符被赋值为1 |
__cplusplus | 当用C++编译程序编译时,其就会被定义 |
6. 宏指令
# | 空指令,无任何效果 |
#include | 包含一个源代码文件 |
#define | 定义宏 |
#undef | 取消已定义的宏 |
#if | 如果给定条件为真,则编译下面代码 |
#ifdef | 如果宏已经定义,则编译下面代码 |
#ifndef | 如果宏没有定义,则编译下面代码 |
#elif | 如果前面的#if给定条件不为真,当前条件为真,则编译下面代码 |
#endif | 结束一个 # if...# else 条件编译块 |
#error | 停止编译并显示错误信息 |
#pragma | 没有正式的定义。编译器可以自定义其用途。典型的用法是禁止或允许某些烦人的警告信息 |
#line | directive modifies the reporting position for the compiler, and is used by code generating software to help the programmer identify the issue in the original source. It can be used by anyone to help redirect error reporting to be more informative. (The #line directive tells the preprocessor to change the compiler's internally stored line number and filename to a given line number and filename) |
网友评论