`
switchlau
  • 浏览: 52889 次
  • 性别: Icon_minigender_1
  • 来自: 深圳
最近访客 更多访客>>
社区版块
存档分类
最新评论

杂记—— 《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;
}

 

分享到:
评论

相关推荐

Global site tag (gtag.js) - Google Analytics