现在的位置: 首页 > 综合 > 正文

《C++ Primer中文版》学习笔记(持续更新中…)

2013年11月25日 ⁄ 综合 ⁄ 共 1394字 ⁄ 字号 评论关闭

【1】命名空间的使用

当要使用cout这样的对象时,需要指明来自命名空间。
可以用std::cout这样的方式(通过作用域操作符)来使用,可是使用起来非常的不方便。
于是,C++中提供了一种方法。可以用using namespace::name;声明。
若using namespace::cout;则在后面使用cout就不用再加前缀。
有些程序猿在写程序时用的是using namespace::std;
其实最好避免这种写法,虽然非常的方便,但是当程序大时,需要多个库时会导致命名冲突。
不过写一些小的程序直接用using namespace::std;会非常的方便。
【2】string对象和字符串字面值的链接
当进行string对象和字符串字面值混合连接操作时,“+”操作符的左右必须至少有一个是string类型的。

string s1 = "hello";
string s2 = "world";
string s3 = s1 + "," + "world"; //ok
string s4 = "hello" + "," + s2; //error
s3的初始化方法和标准输入输出的串联效果是一样的。等同于:

string tmp = s1 + ",";
string s3 = tmp + "world";
而这么来看s4的方法显然是错误的。
【3】使用数组而不是vector的缺点
与vector类型相比,数组具有如下缺点:
数组的长度是固定的,而且数组不提供获取其容量大小的size操作,也不提供自动添加元素的push_back操作。因此,程序员无法在程序运行时知道一个给定数组的长度,而且如果需要更改数组的长度,程序员只能创建一个更大的数组,然后把原数组的所有元素复制到新数组的存储空间中去。与使用vector类型的程序相比,使用内置数组的程序更容易出错且难以调试。
【4】指针和const限定符
——>从右向左读<——
1)
  const double pi = 3.14159;
  const double *const pi_ptr =π

  
 从右向左阅读上面的声明语句为“pi_ptr首先是一个const指针,指向double类型的const对象”

2)
  typedef string *pstring;
  const pstring cstr;(等价于string *constcstr;)

该声明语句的是把cstr定义为指向string类型对象的const指针。
3)阅读const声明语句产生的部分问题,源于const限定符既可以放在类型的前面也可以放在类型后

  string const s1;
  const string s2;

以上两句等价,s1,s2为const对象。
4)用typedef写const类型定义时,const限定符加载类型名前面容易引起对定义的真实类型的误解:

  string s;
  typedef string *pstring;
  const pstring cstr1 = &s;
  pstring const cstr2 = &s;
  string *const cstr3 = &s;

 
把const放在类型pstring之后,然后从右向左阅读该声明语句就会非常清楚的知道cstr2是constpstring类  型,即指向string对象的const指针。
 不幸的是,大多数人在阅读C++程序时都习惯看到const放在类型的前面。于是为了遵循惯例,只好建议编程时把const类型放在类型前面。但是把声明语句重写为置const于类型之后更便于理解。

抱歉!评论已关闭.