以文本方式查看主题 - 计算机科学论坛 (http://bbs.xml.org.cn/index.asp) -- 『 C/C++编程思想 』 (http://bbs.xml.org.cn/list.asp?boardid=61) ---- Thinking again in C++ 系列 (http://bbs.xml.org.cn/dispbbs.asp?boardid=61&rootid=&id=39217) |
-- 作者:卷积内核 -- 发布时间:10/23/2006 3:40:00 PM -- Thinking again in C++ 系列 爱死Thinking in系列了,所以起了这个名字。本文的思想也部分来至于这套书,或参照对比,或深入挖掘,或补益拾慧,或有感而发,既包括Thinking in C++,甚至也包括Thinking in Java。 Thinking again in C++(一)常量性原理 关键字:C++,常量,const,constant,引用,指针,形参,实参,函数,返回值 1.不能将const修饰的任何对象、引用和指针作为赋值表达式的左值。 const int cx=100; const int & rcx=cx; const int * pcx=&cx; cx=200; //error rcx=200; //error *pcx=200; //error 2.const类型的对象不能直接被non-const类型的别名所引用。 (1)不能将const类型的对象传递给non-const类型的引用。 const int cx=100; int & rx=cx; //error (2)不能将const类型的实参传递给形参为non-const类型引用的函数。 void f(int a) { } void g(int & ra) { } const int cx=100; f(cx); //ok g(cx); //error (3)不能将const类型的对象作为non-const类型引用的函数返回值。 int & f(const int & rca) { return rca; //error } int x=100; f(x); 3.可以使用const类型别名引用non-const对象。此时通过const引用不能修改对象,但对象可以通过non-const引用被修改。 int x=100; int & rx=x; const int & rcx=x; //ok x=200; |
-- 作者:卷积内核 -- 发布时间:10/23/2006 3:41:00 PM -- Thinking again in C++(二)自赋值是非公断 关键字:C++,自赋值,自复制,赋值,assign,assignment,复制,拷贝,copy 1.需要考虑的自赋值。当类包含指针或引用成员时应注意检查。 2.不可能出现自赋值。 3.不是自赋值的赋值。仅仅内容相同的赋值不是自赋值。 4.不应该检查的自赋值。 |
-- 作者:卷积内核 -- 发布时间:10/23/2006 3:41:00 PM -- Thinking again in C++(三)缺省参数的误区 关键字:C++,缺省参数,default argument,函数,function,构造器,constructor,误区 使用缺省参数时应该注意避开下列几种误区。 1.滥用缺省参数,损害代码的结构和可读性。 2.多个缺省参数,可能引入逻辑含混的调用方式 3.重载时可能出现二义性 4.函数调用中的精神分裂症 |
-- 作者:卷积内核 -- 发布时间:10/23/2006 3:42:00 PM -- Thinking again in C++(四)运算符重载形式推导 关键字:C++,运算符,operator,重载,overload,形式推导 定理:自定义类型不要毫无价值地与内建类型不兼容(Effective C++ 2e)。这个定理是本篇所有内容的理论基础,可见它的重要性。但我无法证明,只是从直觉上认为它是正确的,如果允许的话,我更乐意把它称为公理。 内建类型的运算符串链规则: 成员函数版运算符重载的声明形式: 通过合理使用const修饰符和引用,使重载运算符的行为同内建类型一致。 [1]由于[A][B]的关系,+=运算符的返回值应能够被改写,所以传回*this的引用。 [2]+运算符不改变左操作数,所以函数为const性质。+的结果存放在函数的local对象中,出于安全上的考虑,local对象不能作为引用返回,又因为[C]的关系,所以传回local对象的const拷贝。 [3]内建类型的返回值被编译器约定不能作左值,此时可省略返回值的const。其他同[2]。 [4]由于[D]的关系,同[1]。 [5]自增运算符的前缀版本返回改变后的对象,又由于[E]的关系,所以传回*this的引用。 [6]自增运算符的后缀版本返回改变前的对象,所以必须建立一个local对象保存原状态,于是函数返回值同[2]。 从[1][4][5]的实现可以看到,我们能够自然提供[A][B][D][E],同时保证足够的严谨。而对于[2],不存在安全的手段,让形如[C]的式子通过编译。还有,为什么内建类型的串链规则[E][F]有如此微妙的差异,从[5][6]可以看出来,因为函数可以安全地返回改变后的对象,却无法安全地返回改变前的对象。 |
-- 作者:卷积内核 -- 发布时间:10/23/2006 3:43:00 PM -- Thinking again in C++(五)深入认识对象初始化 关键字:C++,初始化,initialization,对象,object switch (t) |
W 3 C h i n a ( since 2003 ) 旗 下 站 点 苏ICP备05006046号《全国人大常委会关于维护互联网安全的决定》《计算机信息网络国际联网安全保护管理办法》 |
125.000ms |