C++ Primer总结

1、如果反斜杠\后面跟着的八进制数字超过3个,只有前3个数字与\构成转义序列。例如\123

2、同样的\x要用到后面跟着的所有数字。\x12346213

3、变量只能定义一次,但是可以被多次声明。

4、指针和引用的区别:

  1)引用是另一个对象的别名,而指针本身就是一个对象。

  2)引用必须初始化,并且一旦定义了引用就无法再绑定到其他对象。而指针无须在定义时赋初值,也可以重新赋值让其指向其他对象。

5、getline(cin, word)函数遇到空格符不会停止,输入一行数据,即遇到换行符结束,字符串word不包括换行符。

6、string a("hello");  for (auto &c, str);  意思是循环遍历字符串a的每个字符。存储在c中,自动初始化为下一个字符。

7、vector和string对象的下标运算符可用于访问已存在的元素,而不能用于添加元素。

8、int   &val  =  10;  (错误,引用只能绑定在对象上,而不能与某个字面值或表达式的计算结果绑定在一起)

   const   int  val = 10;  (正确,允许一个常量引用绑定非常量对象、字面值、甚至是个一般表达式) 

9、重复声明例子(错误):

        Record lookup(Phone a)                               

        Record lookup(const Phone a)                            

 

        Record lookup(Phone *a)  

        Record lookup(const Phone a)   

        

        Record lookup(Phone &a)

        Bool lookup(const Phone a)

  对于接受指针或引用的函数来说,对象是非常量还是常量对应的形参不同。(构成重载)

        Record lookup(Account &a) 

        Record lookup(const Account &a)      

 

        Record lookup(Account *a)

        Record lookup(const Account *a)

10、声明函数时,一旦某个形参被赋予了默认值,那么它之后的形参都必须要有默认值。

11、局部变量不能作为默认实参。(static静态数据成员同样不能作为默认实参)

  sz   wd  =  80;    char  def  =  '  ';        sz =  ht();

  string   screen(sz  =  ht();   sz =  wd;    char  =  def);

  void   f2()

  {

    def  =  '*';         //改变了默认实参的值

    sz   wd  =  100;       //隐藏了外部定义的wd,但是没有改变默认值,因为是新创建的局部变量,无法改变默认值。

    window   =  screen();    //调用screen(ht(),   80,  '*')

  } 

12、封装的优点:

  1、确保用户代码不会无意间破坏封装对象的状态。

  2、被封装的类的具体实现细节可以随时改变,而无需调整用户级别的代码。

13、一个const成员函数如果以引用的形式返回*this,那么它的返回类型将是常量引用。

14、关联容器(与顺序容器的本质区别在于:关联容器是通过键(key)存储和读取元素的,而顺序容器则通过元素在容器中的位置顺序存储和访问元素。 

15、在顺序容器中可以用c.front()和c.back()分别以返回引用的形式访问容器的头元素和尾元素。(注意使用前需要检验容器是否为空,即 !c.empty())。

16、如果往容器中调用insert(给定位置begin,值vec)函数,会在begin的位置之前插入值vec,并返回新增值位置。

  而erase()函数则是返回擦除元素的下一位迭代器。

17、s.substr(pos, n)返回一个string,包含s中从pos开始的n个字符的拷贝。

  s.append("good")将“good”追加到字符串末尾。

  s.replace(pos, n,  “good”)把字符串s中的pos位置开始的3个字符替换成候选字符串“good”。

18、拷贝初始化发生的条件:

  a.我们在使用=号定义变量时。

  b.将一个对象作为实参传递给一个非引用类型的形参

  c.从一个返回类型为非引用类型的函数返回一个对象

  d.用花括号列表初始化一个聚合类中的成员

  e.初始化标准容器库或调用其insert()或push_back()函数。

19、在一个构造函数中,成员的初始化是在函数体执行之前完成的,且按照成员在类中出现的顺序进行初始化。

  在一个析构函数中,首先执行函数体,然后销毁成员。成员按照初始化的顺序逆向销毁。

20、当指向一个对象的引用或指针离开作用域时,析构函数不会执行。

21、StrblobPtr& operator++();                            前置运算符,返回对象的引用

  StrblobPtr  operator++(int);        后置运算符返回对象的值。(int 用来区别前置和后置运算符)

22、#define  swap(x,y)\                              swap(x,y)\

      x = x^y;\          (x) = (x) + (y);\

      y = x^y;\             (y) = (x) - (y);\

      x = x^y;            (x) = (x) - (y);

      

posted @ 2018-01-08 23:18  pilgrim0  阅读(272)  评论(0编辑  收藏  举报