ch1
1,
endl 操纵符
写入endl的效果是结束当前行,并将与设备关联的缓冲区(buffer)中的内容刷到设备中。
2,
命名空间 namespace
作用域运算符 ::
作用域运算符可以用来显式访问全局变量:(但在块内外使用同样名字的变量不被建议)
如:
int val = 0; int main() { int val = 1; cout << val << endl; cout << ::val << endl; return 0; }
执行结果将是:
1
0
3,
类(class)的概念:
一种用于自己的数据结构及其相关操作的机制。
成员函数:
class.(member function)
ch2
1,
当一个算术表达式中既有无符号数又有int值时,那个int值就会转换为无符号数。
如:
unsigned u = 10; int i = -42; cout << i + u << endl;// 如果int占32位,输出429467264
另外,当从无符号数中减去一个数时,不管这个值是不是无符号数,
我们都必须确保结果不能是一个负值。
如:
unsigned u = 10,i = 42; cout << u - i << endl;// 输出32
2,
对象(Object),通常情况下,是指一块能存储数据并具有某种类型的内存空间。
3,
初始化与赋值的区分:
初始化不是赋值,初始化的含义是创建变量时赋予其一个初始值,而赋值的含义是把
对象的当前值擦除,而以一个新值来替代。
4,
初始化有好几种不同形式:
int val = 0; int val = {0}; int val{0}; int val(0);
作为C++11标准的一部分,用花括号来初始化变量得到了全面应用,这种初始化的形式被
称为列表初始化。当用于内置类型的变量时,这种初始化形式有一个重要特点:如果我们
使用列表初始化且初始值存在丢失信息的风险,编译器将会报错:
double val = 3.141592; int a{val},b = {val}; // 错误:存在丢失信息的风险 int c(val),d = val; // 正确,转换执行,但确实丢失了部分信息
5,
变量声明和定义的关系
定义:初次创建;声明:从别处摘用(自己的理解)
如:
extern int i; // 声明i而没有定义 int j; // 声明并定义j
我们能给由extern关键字标记的变量赋一个初始值,但是这么做也就抵消了extern的作用:
extern double pi = 3.141592;// 定义
在函数体内部,如果试图初始化一个由extern关键字标记的变量,将引发错误。
6,
引用(reference)为对象起了另外一个名字,引用类型引用另外一种类型。
通过将声明符写成&d的形式来定义引用类型,其中d是声明的变量名:
int ival = 1024; int &referval = ival;
引用必须被初始化。
指向指针的引用:
int val = 1; int *pt = &val; int *&r = pt;
7,
顶层const表示指针本身是个常量
底层const表示指针指向的对象是一个常量
const int *p = NULL; // 底层const int *const p = NULL; // 顶层const
8,
C++11 using:
typedef int shit;
相当于
using shit = int;
9,
C++11 auto:
让编译器替我们去分析表达式所属的类型:
auto item = val1 + val2; auto sz = 0,pi =3.14; // 错误:一条语句中所有变量的初始基本类型都必须一样。
10,
C++11 decltype:
从表达式的类型推断出要定义的变量的类型:
int val = 1; decltype(val + 1.5) res = val + 1.5;//分析val+1.5的值并将res声明为其类型 cout << res << endl;
原文:http://www.cnblogs.com/ray-coding-in-rays/p/6295015.html