C++ Primer Plus 笔记

  1. main不写return,编译器会认为有return 0;只对main函数有效;
  2. using namespace std;最好只添加用的部分,比如:using std::cout;
  3. 初始化可以 int a,b,c; a=b=c=8;
  4. 变量命名 两个单词第二个首字母大写,或者中间下划线 然后都小写;
  5. 变量初始化c++11可以用大括号 int a{};或者 int b={3};大括号初始化器可以用于任意类型;
  6. unsigned 是unsigned int 缩写;
  7. 注意变量初始化的类型 能用short不用int,比如int为16位系统上int型数组,那么一直到int32位系统上,内存存储就增加了一倍,但是用short就不会,所以注意内存的使用;
  8. cout<
  9. cin和cout将输入输出看作char流,wcin和wcout可以用来处理wchar_t流:
    可以加前缀L来指示宽字符常量和宽字符串; wchar_t pop = L’P’; 在支持两字节的系统中 上例把每个字符存储在一个两字节的内存里;
  10. c++11 新增char16_t : 用前缀u 表示其字符常量和字符串常量:u’P’;u"kk"; char32_t 用U。。。
  11. c++定义常量最好用const type name/Name/kname = value;用const修饰之后编译器则不允许其被修改,与define区别:1.他能定义类型;2.可以限定变量作用域;3.可以用于更复杂的类型;可以用const来声明数组长度。
  12. c++11初始化数组或者其他时可以省略等号;
  13. cin读的字符串也是面像单词的,cin’使用空格,制表符和换行符来确定字符串结束位置,所以有空格的字符串没办法读完整;而istream提供了面向行的类(cin)的成员函数,getline()和get();getline()识别换行符作为结束,但不保存换行符,存储时候存取数组大小-1,将换行符替换为\0;使用:cin.getline(数组名,数组大小),可以理解getline读取并丢弃换行符 ;而get()是将换行符试为结束符,但不读取换行符,而是将他留在输入队列中,所以如果两次连着调用get(),那么第二次读到的第一个字符为换行符即结束符,所以get(数组名,大小);—get()没有参数表示可以读取一个字符;—get(数组名,大小); 对比get和getline, get可以检查错误输入,比如换行可能是输入的换行符,还可能是读取的数组已经满了,所以可以用get 来检查第二行是不是换行符,如果不是那么就是还有其他输入;
  14. c++11新增原始(raw)字符串,cout << R"(“wo shi " qin li jie \n ni ne ‘\n’, “\n” lla)” << endl; 输出的就是自己,不用考虑转译等;
  15. char型数组用strlen求字符串长度时,strlen是遇到\0才会结束,所以如果数组没被初始化,结果不定;而未被初始化的string类型对象的长度被自动设置为0;
  16. typeName *pointer_name = new typeName; delete pointer_name;只能用delete来释放new的指针;
  17. 使用new创建动态数组:`int *psome = new int [10];delete [] psome;
分配动态数组通用格式:
type_name *pointer_name = new type_name [num_elements];
  1. 数组在声明就固定好的称为静态联编,动态申请的为动态联编;

10/24日

  1. C++11版本的auto可以推断出声明的变量的类型:auto ppd = arp;

  2. 数组:原始数组:int a[4]={1,2,3,4}; //C++98: vector a[4]; a[0]=1;... //C++11 array a={1,2,3,4};总结 :array和数组都在栈区,vector在自由存储区或者堆区; 另外array之间可以互相赋值, 而普通数组之间不可以,必须逐个赋值;

  3. C++98 新增的标准模板库(STL)提供了模板类vector,它是动态数组的替代品。C++11提供了模板类array类,它是定长数组的替代品;

  4. 程序中延时可以用 clock()函数,函数返回程序执行后的系统时间, 头文件ctime,CLOCKS_PER_SEC 常量等于每秒包含的系统时间单位数,用法:`

  5. int sec = 10;
    clock_t delay = sec*CLOCK_PER_SEC;
    clock_t start = clock();
    while(clock() - start < delay);
    cout<<""< return 0;`//以系统时间为单位 而不是秒,避免在每次循环中将系统时间转换为秒

  6. `string arry[5] = {“ni”,“haao”,“ma”,“la”,“le”};
    for (auto value : arry)、、不可修改数组中的值
    cout << value << endl;

    for (string& pval : arry)//&表引用, 可以修改数组中的值
    {
    pval = pval + “q”;
    cout << pval << endl;
    }还可以:for(int x: {1,2,3})//主要用于各种模板容器类 cout<

  7. cin忽略输入的空格和换行符,cin.get()可以弥补;

  8. 输入4 9 ==》cin>>a>>b
    11月5日
    第八章

  9. 内联函数:缺点占内存,如果程序在十个不同地方调用方一个内联函数,那就会包含10个该函数的副本;不能递归
    函数声明和定义前都加关键字 inline
    C语言的宏定义的函数可以考虑写成内联函数形式

  10. 复合数据类型 引用:
    int a=10; int &bb = a;须在声明引用时就初始化; 引用接近int *const bb=&a; 引用一旦初始化就不能改了;----左值引用
    结构引用 结构体是引用的形式
    注意:避免返回临时变量的引用

  11. 默认参数 通过函数声明或者定义来写默认参数,且默认参数 顺序必须是从右到左添加默认值;

  12. 函数重载:如果两个函数的参数个数和类型不同
    11月16

  13. c++11中有四种方式来存储数据:
    1.自动存储持续性:在程序开始执行所属的代码块时被创建,执行完使用的内存被释放;
    2.静态存储持续性 static修饰
    3.线程存储持续性C++11;如果变量用thread_local声明的,则其生命周期与所属的线程一样长
    4.动态存储持续性:用new delete运算符分配的内存

  14. c++关键字auto:自动类型推断

  15. 如果要在多个文件中使用外部变量,只需要在一个文件中包含该变量的定义,但在使用该变量的其他所有文件中,都必须使用关键字extern声明它

  16. 存储说明符:auto :自动类型推断;register:在声明中指示寄存器存储; static extern:表明是引用声明,即声明引用在其他地方定义的变量; thread_local (可与static extern结合使用)mutable:表示即使结构/类变量为const,其某个成员也可以被修改

  17. cv限定符:const 内存被初始化后,程序不能再对他进行修改; volatile:防止编译器的优化功能,就是直接取缓存再寄存器的优化功能;
    11月21:

  18. 模板:编译器在选择原型时,非模板版本优先于显式具体化和模板版本,显示具体化优先于使用模板生成的版本:
    template<> void swapp(job& a, job& b);显示具体化
    template
    void swapw(type& a, type& b, int n)

你可能感兴趣的:(c/c++,c++)