杂记—— 《C++程序设计语言》

1. 类定义可以由于#include的使用而在不同源文件里重复出现,这样并不违反唯一定义规则

 

2. class的const成员函数不能修改class 成员变量

 

3. 对于const或者非const对象都可以调用const成员函数,而非const成员函数则只能对非const对象调用 p205

 

4. 在类X的非const成员函数里,this 的类型就是X*;在类X的const成员函数里 this 的类型就是const X* p206

 

5. 包含const或引用成员的类不能进行默认构造,必须在构造函数的初始式中进行初始化 p218,222

 

6. union成员不能有构造函数和析构函数 ?? p218

 

7. 复制构造函数完成对未初始化的存储区的初始化,复制赋值运算符则必须正确处理一个结构良好的对象。赋值运算符的一般性策略:防止自赋值,删除老元素,初始化,复制新元素。p220

 

关于string

1. string迭代器不做范围检查。string的下标运算符 [ ] 不进行范围检查,而 at() 则进行范围检查。如果对at()超范围访问,将导致out_of_range 异常。P516

 

2. 指针和数组的等价关系对 string 不成立,如果s 是 string,&s[0] 和 s 是不一样的 P516 

 

3. string 的 length() 和 size() 是等价的,但是它们不能统计C风格的以0结束的字符串。 P517

 

4. 许多串操作以字符位置加上字符个数作为参数。如果所给的位置大于串的大小,则会抛出 out_of_range 异常,“过大”的字符计数值则简单地当作取出这个串“剩余”的字符,并不会抛出异常。 P517

 

5. 不能用单个字符对string 进行初始化,但是可以用单个字符对string 进行赋值。 P519

string s = 'a'; //wrong
string s2;
s2 = 'a';        //OK

 

6. string 的 data() 产生的是字符数组,而 c_str() 产生的是C风格字符串,即以0作为结束符。string 中可以包含0

字符。即0在 string中并不表示结束标记。?? data() 和 c_str() 产生的字符串存放与缓冲区中,如果要长期使用string的字符串表示,可以通过copy() 函数复制到一个数组中。 P520

char* c_string(const string& s)
{
       char* p = new char[s.length()+1];
       s.copy(p,s.length());
       p[s.length()]=0;
       return p;
}

 

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值