美文网首页
C++ Primer备忘

C++ Primer备忘

作者: saviochen | 来源:发表于2022-08-13 17:23 被阅读0次

    第I部分 C++基础

    1. cin和cout的箭头方向cin指向变量,输出指向cout
    2. /*和*/采用就近匹配原则,因此其中间不允许嵌套
    3. cerr:一个ostream对象,关联到标准错误,通常写入与标准输出相同的设备。默认情况下,写到cerr的数据是不缓冲的。cerr通常用于输出错误信息或其他不属于正常逻辑的输出内容。
    4. clog 一个ostream对象,关联到标准错误。默认情况下,写到clog的数据是被缓冲的。clog通常用于报告程序的执行信息,存入一个日志文件中。
    5. C++语言规定一个int至少和一个shor一样大,一个long至少和一个int一样大,一个long long至少和一个long一样大。其中,数据类型long long是在C++ 11新定义的。
    6. 在一个算术表达式中使用布尔变量,则其结果是0或1。
    7. 不要混用带符号类型与无符号类型,带符号数会自动转化成为无符号数。
    8. C++规定的转义字符包括\n换行 \t横向制表符 \a报警(响铃)符 \v纵向制表符 \b退格符 \"双引号 \\ 反斜杠 \?问号 \'单引号 \\反斜杠 \r 回车符 \f进纸符
    9. 指定字面值类型:
    前缀:u 表示unicode 16字符 char16_t,U表示unicode 32字符 char_32_t,L表示宽字符 wchar_t, u8表示UTF-8(仅用于字符串字面常量) char
    整型字面后缀:u or U表示unsigned,l or L表示long,ll or LL表示long long
    浮点型字面值:f or F 表示float, l or L表示 long double
    
    1. 指针声明*和引用声明&都只针对单个变量。对复合指针引用,最简单的办法是从右向左阅读。int * &r = p;表示r是对指针p的引用。
    2. const限定是防止通过该值修改变量。顶层const是针对值本身的限定,底层是针对值指向对象的限定。
    3. 默认情况下,const仅在文件内有效,例如const int bufSize = 512;(类似于宏)。多文件共享需要使用extern。
    4. 指针类型不匹配会报错,而引用类型不匹配则会自动转化,临时值引用。
    int i = 0;
    double *p = &i; //错误
    double dval = 3.14;
    const int &ri = dval; //正确,绑定到了一个转化过的临时量上
    
    1. constexpr仅对指针有效,与指针所指对象无关。constexpr把指针对象设置成了顶层指针:
    const int *p =  nullptr; //p是一个指向整数常量的指针
    constexpr int *q = nullptr; //q是一个指向整数的常量指针
    
    1. typedef遇到复杂场景,不能直接替换成原来的样子来理解,而是将其对应复杂指针定义为了顶层const指针。
    typedef char *pstring;
    const pstring cstr = 0; // cstr是指向char的常量指针
    const pstring *ps; // ps是一个指针,它的对象是指向char的常量指针。
    const char *cstr = 0; // 是对const pstring cstr的错误理解。不能直接替换展开。此处cstr是真想char常量的指针
    

    16 auto在同一条定义语句中必须指向相同的数据类型。auto引用可保留底层const,无法保留顶层const

    auto i = 0, *p = &i; //正确
    auto sz = 0, pi = 3.14; //错误
    auto &h = 42; //不能为非常量引用绑定字面值
    
    1. 解引用对象是左值,因此decltype(解引用对象)是引用。decltype表达式如果是双引号,结果也将是引用。
    int i = 42, *p = &i;
    decltype(r + 0) b; //正确,加法结果是int,因此b是一个未初始化的int
    decltype(*p) c; //错误,c是int&,必须初始化
    decltype((i)) d; // 错误,d是int&,必须初始化
    decltype(i) e; //正确,e是一个未初始化的int
    

    相关文章

      网友评论

          本文标题:C++ Primer备忘

          本文链接:https://www.haomeiwen.com/subject/zjpqgrtx.html