zoukankan      html  css  js  c++  java
  • C++Primer笔记-----day01

    =======================================================
    day01
    =======================================================
    1.当我们赋给一个无符号类型一个超出它表示范围的值时,结果是初始值对无符号类型表示数值总数取模后的余数。
    eg: unsigned char c = -1; // c的值为255 对于负数,应该加上被除数的整数倍使得结果大于等于0再运算,即 (-1)%256 = (-1+256)%256 = 255%256=255
    2.当我们赋给带符号类型一个超过它表示范围的值时,结果是未定义的。
    3.切勿混合使用带符号类型和无符号类型。因为带符号数会自动转换成无符号数。
    4.使用无符号数作为循环条件要注意的问题:
    for(unsigned u =10;u<=0;--u) // 错误,变量u永远不会小于0,循环会一直进行。
    std::cout<<u<<endl;

    unsigned u=11; // 正确。
    while(u>0){
    --u;
    std::cout<<u<<endl;
    }
    5.泛型转义序列:其形式是x后跟1个或多个十六进制数字,或后跟1个、2个、3个八进制数字,数字部分表示的是字符对应的数值。如:x4d 表示字符M ,115也表示字符M
    6.变量的列表初始化(list initialization):
    int a{0};
    int a = {0}; // 这两条语句都可以做到。
    列表初始化有一个重要特点:当我们使用列表初始化的初始值存在丢失信息的风险(如精度等),编译器将报错。
    eg: long double ld = 3.1415926536;
    int a{ld}; // 错误,存在丢失信息的风险
    7.建议:当你第一次使用变量的时候再定义它。
    8.复合类型:引用、指针
    引用有两种,左值引用和右值引用(c++11新增)。
    要注意的两点是,
    (1)引用类型的初始值必须是一个对象。
    eg: int &refVal = 10 // 错误,在最前面加一个const就可以了,原因在下面解释。
    (2)引用的类型要和与之绑定的对象严格匹配。
    eg: double dval = 3.14;
    int &refVal = dval; // 错误,在最前面加一个const就可以了,原因在下面解释。
    有两种例外情况,其中一种是在初始化常量引用允许用任意表达式作为初始值,只要该表达式的结果能转换成引用的类型即可。可以是非常量的对象、字面值、甚至是一个表达式。
    eg: int i =42;
    double dval = 3.14;
    const int &r1 = i; // 正确
    const int &r2 = 10; // 正确
    const int &r3 = r1*2; // 正确
    const int &r4 = dval; // 正确

    9.与引用类似,指针的类型也要和它所指向的对象严格匹配。
    eg: double *dval;
    double *pd = &dval; // 正确
    int *pi = pd; // 错误,指针pi的类型与指针pd的类型不匹配
    10.一条变量的定义语句由一个基本数据类型和一组声明符组成。
    面对一条比较复杂的指针或者引用的声明语句时,从右向左阅读有助于弄清楚它的真是含义。eg: int *&r = p; // 离r最近的是&,表明r是一个引用,往左走,*表明r引用的是一个指针,最后,基本数据类型int表明r引用的是一个int类型的指针。
    11.const对象仅在文件内有效,当多个文件中出现了同名的const变量时,等同于在不同的文件中分别定义了独立的变量。想在不同的文件中共享const变量,也就是说,只在一个文件中定义,而在其他多个文件中声明并使用它,可以这样做:
    对于const变量不管是声明还是定义,都添加extern关键字。
    /////////////////////////////////////////////////////
    12.顶层const与底层const
    顶层const表示指针本身是个常量,更一般的说,它表示任意的对象是常量。
    底层const表示指针所指的对象是一个常量。
    13.常量表达式是指:值不会改变,并且在编译过程就能得到计算结果的表达式。
    eg: const int a = 20; // a是常量表达式
    const int b = a +1; // b是常量表达式
    const int c = get_size(); // c不是常量表达式,get_size()需要运行时才能确定
    我们有时候很难分辨一个初始值是否为常量表达式。c++11新标准允许变量声明为constexpr类型以便由编译器来验证变量的值是否是一个常量表达式。声明为constexpr的变量一定是一个常量,而且必须用常量表达式初始化。
    eg: constexpr int mf = 20; // 20是常量表达式,所以声明正确。
    constexpr int sz = size(); // 只有当size()是一个constexpr函数时,才是一条正确的声明语句。
    必须明确一点的是:constexpr仅对指针有效,与指针所指的对象无关。
    eg: const int *p = nullptr; // p是一个指向常量的指针
    constexpr int *q = nullptr; // q是一个常量指针

  • 相关阅读:
    Git工具提交github.com
    小程序-setData方法使用--改变默认数据data初始值方法
    小程序-全局变量
    小程序--获取openid
    小程序--错误{"errcode":40125,"errmsg":"invalid appsecret, view more at http://t.cn/RAEkdVq, hints: [ req_id: lE8J30972ns32 ]"}
    小程序-获取openid
    微信小程序--简易table表格
    微信小程序--简单页面跳转
    小程序禁止下拉更新
    小程序--登录获取code
  • 原文地址:https://www.cnblogs.com/ll-10/p/9556387.html
Copyright © 2011-2022 走看看