1 const对象默认为文件的局部变量(P50)

a.cpp
const int a = ;
b.cpp
extern int a;//undefined reference to "a" a.cpp
int a = ;
b.cpp
extern int a;//OK a.cpp
extern const int a = ;
b.cpp
extern int a;//OK

即非const变量默认为extern,const变量要在其他文件中被访问,必须显式指定为extern

2 const与引用(P51)

非const引用绑定到const对象是不合法的,const引用可以绑定到const对象和非const对象

const引用还可以绑定到不同但相关的类型的对象,或是绑定到右值

3 枚举定义了相关联的一组常量集,enum定义了一种新的类型

4 字符串字面值不是string对象

 getline(cin,string)函数读取一行,但将忽略最后的换行符

 string对象的size()操作返回的是string::size_type类型的值,称为string类类型的配套类型,使得该类型的使用与机器无关

 +操作符的左右操作数必须至少有一个是string类型的对象

 string对象的下标操作可以用作左值

 字符的操作函数如isalnum()、isalpha()、tolower()等函数都定义在cctype头文件中(C++标准库包括了C标准库,C标准库中name.h在C++标准库中对应为cname)

5 vector相关问题

 c++程序员优先使用!=而不是<来编写循环判断条件,由于vector的动态增长特性,在循环判断中,使用内联函数size,而不是循环之前得到的固定vector大小的值,因为vector会动态增长,内联函数会解决运行时的代价问题

 vector可以进行=赋值 如vector<int> a(2,3)  vector<int> b(3,4),可以进行a=b的赋值

 const_iterator只能用于从容器中读取元素,不能修改元素的值,const vector<T>::iterator 迭代器本身不能移动,但可以修改迭代器指向的元素的值

6 bitset相关问题

 构造函数:bitset<n> b;

      bitset<n> b(u);  //u是unsigned long类型

      bitset<n> b(s);  //s是string类型对象,不能是字符串字面值

      bitset<n> b(s,pos,n) //需要注意的是,字符串的0下标在左侧,bitset的0下标在右侧

 bitset对象上的操作:

      b.any()        //是否存在1

      b.none()       //是否不存在1

      b.count()      //1的个数

      b.size()       //二进制的个数

      b.test(pos)     //测试pos处是否为1

      b.set(),b.set(pod),b.reset(),b.reset(pos)

      b.flip()       //所有位反转

      b.flip(pos)     //pos位反转

      b.to_ulong()    //返回unsigned long值

      os<<b       //输出位集

7 数组和指针

 定义数组维数的常量只能是:整型字面值常量、枚举常量、整型const对象,不能是非const整型对象

 char a[] = "c++" 与 char a[] = {'c','+','+'}的区别,char a[3] = "c++"将导致编译失败

 与vector不同的是,数组不能直接复制与赋值

 数组下标的正确类型是size_t,指针相减的正确类型是ptrdiff_t类型

 int* p1,p2    //p1是指针,p2是int

 void *指针只能用来传递指针,不能解引用,即不能通过void *指针操纵它所指向的对象

 指针和引用的比较:引用定义时必须初始化,一旦初始化,引用就始终指向初始化的对象,所以不存在对引用的重新赋值

 理解代码:定义了一个4*5的int数组

int **p;
p = new int*[];
for(int i = ;i < ;++i)
p[i] = new int[];

 指向const对象的指针:const int *ptr,ptr既可以指向const对象,也可以指向非const对象,ptr本身值可变,不能通过ptr修改指向对象的值

 const指针:int *const ptr,ptr本身是const变量

 C风格字符串:以NULL结尾的字符数组

 C风格字符串的标准库函数:cstring,包括strlen、strcmp、strcat、strcpy、strncat、strncpy等函数,这些函数的参数必须是C风格字符串

 指针与多维数组:int *p[4]:p是一个数组,这个数组每个元素的类型是int*

         int (*p)[4]:p是一个指针,这个指针指向一个指向4元素首地址的指针

8 位操作符

 ~位求反,<<左移,>>右移,位与&,位或|,位异或^

9 后自增操作符优先级高于解引用操作符

10 new和delete相关问题

  new动态创建对象,如果没有显式初始化,则类类型对象使用默认构造函数进行初始化,内置类型对象无初始化,可以使用空括号强制内置类型初始化

  理解代码:delete p1删除的是new分配给p2的动态空间,p1和p2指针本身还可用,之前分配给p1的空间仍有效

int *p1 = new int();
int *p2 = new int();
p1 = p2;
delete p1;

  type *ptr = 0  定义了一个零值指针,delete ptr是合法的

  delete之后,指向delete删除的空间的指针编程悬垂指针,为避免悬垂指针的影响,delete之后立刻将指针赋值为0,表明指针不再指向任何对象

11 类型转换

  隐式转换:指向任意数据类型的指针转换为void*类型,整型数值常量0转换为任意指针类型

  显式转换(强制类型转换):cast_name<type>(expression),将expression依据cast_name转换为type类型

    dynamic_cast:支持运行时识别指针或引用所指向的对象

    const_cast:将转换掉表达式的const性质

    static_cast:

    reinterpret_cast:

         

c++primer复习(一)的更多相关文章

  1. c++primer复习(六)—面向对象编程

    1 C++中,通过基类的引用(或指针)调用虚函数时,发生动态绑定,两个条件(基类引用或指针.虚函数)缺一不可 虚函数的默认实参将发生静态绑定 2 继承层次的根类一般都需要定义虚析构函数 3 任意非st ...

  2. c++ primer复习(四)

    1 标准库容器 顺序容器:vector.list.deque 容器适配器:stack.queue.priority_queue 2 容器元素类型约束: 容器元素类型必须支持复制和赋值,因为容器存放的都 ...

  3. c++ primer复习(五):类

    一:基本内容 1 类 数据成员:用于存储与类对象相关联的状态 成员函数:对数据成员进行操作 类将接口与实现分离,接口指定了类支持的操作,操作的具体实现细节是类的设计者才需要了解 2 类成员 类成员可以 ...

  4. c++ primer复习(三)

    1 istream.ostream类型,cin.cout.cerr是istream或ostream类型的具体的对象,<<和>>是操纵符 getline函数的参数是istream ...

  5. c++ primer复习(二)

    1 悬垂else来自于else语句搭配的if语句的二义性 2 理解switch代码: switch(c) { case 'a': a++; case 'b': b++; default: x++; } ...

  6. C++ Primer中文本查询演示样例Query的实现

    近期在看C++ Primer复习C++的语法,看到书中15.9章中的文本查询演示样例时,认为设计得非常不错,于是便动手照着实现了一个,改动了非常久最终执行成功了,从中也学习到了非常多的语法.以下把实现 ...

  7. LeetCode617. 合并二叉树

    题目 1 class Solution { 2 public: 3 TreeNode* mergeTrees(TreeNode* t1, TreeNode* t2) { 4 if(!t1 && ...

  8. 《C++Primer》复习——with C++11 [4]

    考虑到STL的掌握主要靠的是练习,所以对于STL这部分,我把书中的练习都做一遍,加深印象.这些练习是第9.10.11.17章的,分别是顺序容器.泛型算法和关联容器等. ——10月22日 /*----- ...

  9. 《C++Primer》复习——with C++11 [1]

    1.头文件中不应包含using声明,因为头文件的内容会拷贝到所有引用到他的文件中去,如果头文件里有谋个using声明,那么每个使用了该头文件的文件就会有这个声明,由于不经意间包含了一些名字,反而可能产 ...

随机推荐

  1. HDU-4419 Colourful Rectangle 矩形多面积并

    题目链接:http://acm.hdu.edu.cn/showproblem.php?pid=4419 利用二进制,R为1.G为2.B为4,然后通过异或运算可以得到其它组合颜色.建立7颗线段树,每颗线 ...

  2. jq问题处理

    1.同一个事件,点击显示和隐藏 $(document).ready(function(){ $('.container .nav-header').click(function(){ var chan ...

  3. 按需讲解之Supervisor

    Supervisor是一个进程监控程序. 满足的需求是:我现在有一个进程需要每时每刻不断的跑,但是这个进程又有可能由于各种原因有可能中断.当进程中断的时候我希望能自动重新启动它,此时,我就需要使用到了 ...

  4. background-position也许你没考虑到

    设置背景图片时不知你有没有遇到过背景位置的困扰,有没有深入思考过,background-position到底是什么,下面请各位看看我的理解. 简而言之就一句话,默认图片左上角居元素左上角的坐标,例如: ...

  5. java程序查不出数据来

    同样的错误,不可再犯第三次!!! 数据库中是char,里面带空格,但在pl/sql中这样写可以查出来.如下: select ipostid from product t where ipostid= ...

  6. android应用程序的优先级

    andorid系统为保障应用程序运行的流畅性,当内存资源比较匮乏的时候会杀死那些优先级比较低的进程 android进程的优先级如下图: 1.活动进程: 是指那些正在与用户进行交互的应用程序进程,这种组 ...

  7. 多态VI的创建

    比较适合使用多态VI的场合:一个算法会应用到几种不同的数据类型上.比如读写 INI 文件的 VI,它 们既可以读写数值型的数据,也可以读写字符串.布尔等数据类型. 实现多态 VI 之前,一般先实现它的 ...

  8. Linux 下mysql忘记root密码解决方法

    忘记root密码怎么办:1.关闭数据库2.使用-->mysqld_safe --skip-grant-tables &--<启动数据库3.使用空密码进入数据库(mysql命令后直接 ...

  9. 记录一次centos升级gblic的教训

    前些天公司项目需要对上传的图片打水印,前端采用angularjs,后端nodejs,网上一搜,找到了一个images的库,在本地Windows环境下试了下还不错,然后就上传测试服务器(centos6. ...

  10. linux下安装apache2.4

    linux安装Apache2步骤如下 apr 下载地址 http://mirrors.cnnic.cn/apache//apr/apr-1.5.2.tar.gz 安装过程 tar -xzvf apr- ...