看完EffectiveC++的关于转型的章节,顿时认为周围的代码都处在悬崖边上~~ C的旧式转型:inta = 10; double b = (double)a; 对于C++的四种转型函数, const_cast去掉对象的常量性(仅仅此一个操作符有此功能!) dynamic_cast一般用于继承体系中某对象的归属,耗费较大 reinterpret_cast低级转型,差点儿不用. static_cast强迫隐式转换int->double, void * ->typed * 在类的expecili…
如果可以,尽量避免转型,特别是在注重效率的代码中避免dynamic_casts.如果有个设计需要转型动作,试着发展无需转型的替代设计. 如果转型是必要的,试着将它隐藏于某个函数背后.客户随后可以调用该函数,而不需将转型放进他们自己的代码内. 宁可使用c++-stytle(新式)转型,不要使用旧式转型.前者很容易辨识出来,而且也比较有这分门别类的职掌.…
引言                                                                                                                                                                                                C风格的转型动作 (T)expression // 将expression转型为T 函数风格的转型动作看起来像这…
有关转型的几种做法,已经在早些的博客中写过了.这里先简单回顾一下,再讲一讲effective中对之更深入的阐述. 转型可以按风格可以分成C风格转型和C++风格转型两大类,C风格转型很容易看到,因为我们会经常使用,像 (T) expression 以及: T (expression) 最经典的例子就是处理整数除法,在C/C++程序中,整数除法的结果还是整数,有时会得不到我们想到的结果,比如3/5,结果是0,而不是0.6,但如果这样double(3) / 5,结果就会是0.6了,因为转型操作doub…
NOTE : 1.如果可以,尽量避免转型,特别是在注重效率的代码中避免dynamic_casts. 如果有个设计需要转型动作,试着发展无需转型的替代设计. 2.如果转型是必须要的,试着将它隐藏于某个函数背后.客户随后可以调用该函数,而不需要将转型放进他们自己的代码内. 3.宁可使用C++-style(新式)转型,不要使用旧式转型.前者很容易辨识出来,而且也比较有着分门别类的职撑.…
1.尽可能的延后变量定义式的出现时间 不止应该延后变量的定义,直到非得使用该变量的前一刻为止,甚至应该尝试延后这份定义直到能够给它初值实参为止. 如果这样不仅能够避免构造和析构非必要对象,还可以避免无意义的default构造行为. 2.尽量少做转型动作 尽量避免使用转型,特别是在注重效率的代码中避免Dynamic_casts. 如果转型是必要的,试着将它隐藏于某个函数背后. 尽可能使用新型转型(C++style). 3.避免返回handle指向对象内部成分 避免返回handle(包括refere…
条款26:尽可能延后变量定义式的出现时间 为何要尽量延后? 当程序中途跳出而导致变量未被使用,但是必须进行构造和析构. 最佳初始化变量 直接在构造时指定初值比构造之后再赋值效率高(条款4) ... std::string encrypted(password); ... 循环内变量定义在循环内还是循环外? 程序A:定义于循环外 //方法A:循环外定义 POINT point; for (int i = 0; i < 1000000000; i++) { point = tmp; //tmp =…
尽量少做转型动作 尽量少做转型动作有什么目的?非常明显无非就是提高程序的稳定性.提高程序的运行效率. 那么.有哪些转型方式?每种方式都有什么弱点? 这是我们本节学习的重点. C++有四种转型: const_cast<T>(expression) dynamic_cast<T>(expression) reinterpret_cast<T>(expression) static_cast<T>(expression) 每种转型的作用例如以下: 1.const_…
(一个)C风格遗留转换: (T)expression T(expression) (二)C++提供四种新式转型: (1)const_cast<T>(expression):去除表达式的常量性.是C++中唯一能做此操作的转型操作符. (2)dynamic_cast<T>(expression):主要用来运行"安全向下转型",即用来决定某对象是否归属继承体系中的某个类型.它是唯一无法由旧式语法运行的动作,也是唯一可能耗费重大运行成本的转型动作. (3)reinter…