第一、二章

来源:互联网 发布:淘宝职业退货师被抓 编辑:程序博客网 时间:2024/05/16 06:50
1. cin原来也可以以空格间隔输入(输入包括string)

2.键盘上Ctrl+Z,可以表示文件结束符 

3.文件重定向addItem <infile> outfile

4.char分为:char(具体表现为后面两种之一,取决于编译器)、signed char、unsigned char

5.赋值给 无符号类型 超过范围即为值对范围求模的余数;赋值给 有符号类型 超过范围未定义(undefined)

6.初始化与赋值是不同的概念,初始化的含义是创建变量的时候赋予一个初始值,赋值则把当前值擦除,用新值替代

7.定义于  任何函数体之外  变量被初始化为0,建议初始化内置类型变量,防止未初始化造成的错误

8.extern double pi = 3.1415926为定义,而非声明,任何在函数体  内部试图初始化extern关键字的变量  ,将引发错误

9.用户自定义标示符不能采用双下划线或下划线加大写字母; 函数体外部  不能下划线开头

2.3复合类型(引用,指针等)

    引用为对象起了另一名字,定义引用时,会跟初始值 绑定(bind)在一起,因此无法另引用指向另一个引用,所以引用必须初始化。引用即别名,非对象。

    除2种情况,引用类型需与绑定对象严格匹配

    指针指向的对象类型必须与赋值类型相同

    void *指针,可以存放任意对象地址,但没法访问内存中的对象,因为不知道其类型

    阅读一条比较复杂的指针或引用,可以从右到左阅读该变量的定义  (很有帮助的一条tip)

2.4const限定符

    const的变量不是一个常量表达式,可以在声明,和定义都添加extern关键字,extern const int buffer = func() ---定义 ; extern const int buffer---声明;

    const引用可以绑定到一个非常量对象上

    const int * r3 = &i;      int * const r4 = &i;      r3 = &j;      r4 = &j;这段表明了const int * 与 int * const 的区别,一个是表明指针指向变量的之不可变,一个表明,int类型指针里的内容(地址)不可变,也即只能指向同一个地址

    底层const不能忽略顶层const不受影响,赋值的时候

    个人感悟:无论是const int * p = &i,const int &q = i,其实都只是对改指针或引用的声明,表明不能通过修改 *p的值,或q的值来达到修改i的值,i的值能否被修改取决于i属于什么类型,如果为非常量值,则它可以被其他的变量修改。

    constexpr类型定义,通过一个常量表达式,或constexpr函数(容易在编译期间得出结果)

2.5处理类型
    
    typedef char * pstring 
    const pstring cstr = 0 与const char * cstr=0,完全不一样,因为pstring已经成为了一种类型,参考const int a,表明此指针是不可变的

    auto类型:需要初始化,赋值的时候类型会自动忽略顶层const(跟一般状况一样 )

    decltype类型指示符,返回操作数数据类型
    解引用,原来得到的是引用!!!所以,int * p = &i , decltype(*p)得到的类型类型其实为int &
        解引用操作符是:*。对于其定义书上并没有给出明确的定义,不过其意思是对其得到操作数(必须为指针类型)所指变量的引用。如有如下代码:
int ival;
int *ip=&ival;
int &iref=*ip;//*ip就是ival的引用。
其等价于:
int &iref=ival;
    使用decltype时,如果变了带有括号,则代表返回对其引用的类型,例如decltype( ( i ) ),返回的是int &类型,定义对象的时候必须初始化

    class中的成员默认private,struct则默认public。

    int *p1 = nullptr; 等价于int *p2 = 0 ; 等价于int *p3 = NULL; (难道0地址即表示空指针。。。)
0 0
原创粉丝点击