C++帮助文档(自己写的)
以下所有记录几乎都是摘抄自《C++ primer 5th 中文》
auto 类型说明符 P61
特点:
1. 定义的变量必须有初始值
2. 通过初始值来推算变量的类型
3. 在一条语句中声明多个变量时,这些变量的基本数据类型必须一样。(注意,并没有说限定符等修饰符也要一样)
4. 编译器推断出来的auto类型有时候和初始值并不完全一样,会适当改变结果类型使其更符合初始化规则。
5. 一般会忽略顶层const,保留底层const
为什么要有它:
编程时常常需要把表达式的值赋给变量,这就要求在声明变量的时候清楚地知道表达式的类型。然而做到这一点并非那么容易,有时甚至根本做不到。为此有了auto类型说明符。
decltype 类型指示符 P62
特点:
1.编译器分析表达式并得到它的类型,却不实际计算表达式的值
2.处理顶层const和引用的方式与auto有点不同:如果其使用的表达式是一个变量,则返回该变量的类型(包括顶层const和引用在内)
3.可以不初始化,但是有些特殊的必须初始化,比如引用。
为什么要有它:
希望从表达式的类型推断出要定义的变量类型,但是不想用该表达式的值初始化变量。
const 常量限定符(修饰类型) P53
constexpr 类型 (修饰表达式) P59
=const expression
常量表达式=值不会改变并且在编译过程就能得到计算结果的表达式
Void*指针 P50
1.只能用来和别的指针比较、作为函数的输入或输出、或者赋给另一个void*指针。
2,可用于存放任意对象地址,但我们不知道这个地址里的到底是什么对象
string P76、77
初始化:
#include <iostream> #include <string> using std::cout; using std::endl; using std::string; int main() { string s1; string s2(s1); string s3 = s1; string s4("value"); string s5 = "value"; string s6(10, 'c'); return 0; }
操作:
Struct 定义类的关键字 P64
Struct sales_data
{
。。。。
};
关键字紧跟类名和类体(类体可空)
typedef 类型别名(type alias) P60
=type definition
C++11中可以用别名声明来实现:
using xx=xxx;
特点:
1.类型别名和其替代的类型名等价(等价的意思不是把类型别名替换成它本来的样子去理解)
为什么要有它:
让复杂的类型名字变得简单明了、易于理解和使用,还有助于程序员清楚地知道使用该类型的真实目的。
预处理器功能
头文件保护符 P68
=header guard
#ifndef 大写头文件名
#define 大写头文件名
............
#endif
#include
#include 头文件名
预处理器看到这个标记时就会用指定的头文件内容替代#include