More Effective C++ Note
文章平均质量分 65
jonson_zc
相信厚积薄发!
展开
-
使用C++转型操作符(More Effective_C++_2(基础))
一、c语言中的类型转换表达式:(type) expression注:几乎允许你将任何类型转换成任何其他类型,另外一个问题是它们难以辨识,因为小括号加上一个对象名,在C++任何地方都有可能被使用二、C++中新式转型操作符(cast operator)2.1 static_cast (1)表达式 static<type>(expression) (2)static_cast原创 2015-08-18 21:50:37 · 449 阅读 · 0 评论 -
考虑用赋值运算符(op=)取代其单独形式(op)(More Effective C++_22(效率))
大多数程序员认为假如他们能这样写代码: x = x + y; x = x - y; 那他们也能这样写: x += y; x -= y; 假如x和y是用户定义的类型(user-defined type),就不能确保这样。就C++来说,operator+、operator=和operator+=之间没有任何关系,因此假如你想让这三个operator同时存在并具有你所期望的关系,就必须自己实现它们原创 2015-09-05 17:10:32 · 571 阅读 · 0 评论 -
理解临时对象的来源(More Effective C++_19(效率))
本文探讨临时对象的来源,怎么避免临时对象,本文并没有深入涉及,在效率中的其他小节,有具体方法去解决一、 区别临时对象和局部对象template<class T>void swap(T& object1, T& object2){ T temp = object1; object1 = object2; object2 = temp;}通常把temp叫做临时变量。不过就C++而言,temp根本不原创 2015-09-05 14:51:18 · 425 阅读 · 0 评论 -
前置和后置操作符的区别(More Effective_C++_6(运算符))
++和–的原理类似,下面仅++操作符来分析前置和后置的区别先看一段代码:class A{pubilc:A& operator++();//前置++const A& operator++(int);//后置++A& operator--();//前置--const A& operator--(int);//后置--};A a;++a;//调用a.operator++()a++;//调用a.原创 2015-08-21 10:02:38 · 671 阅读 · 0 评论 -
警惕C++隐式转换(More Effectiv C++_5(运算符))
C++的类型转换,对于显示类型,C++定义了四种新的类型类型转换,即static_cast、dynamic_cast、const_cast、reinterpret_cast;当然C++也继承了C语言的特性,也可以用C中转换格式,即小括号; 对于隐式转换,C++允许编译器在不同类型之间执行转换,它继承了C语言的一些特性,允许默默的将char转换成int、short转换成double等等;原创 2015-08-20 22:07:39 · 555 阅读 · 0 评论 -
不要以多态的方式处理数组(More Effective-C++_3(基础))
类继承的最重要的特性是你可以通过基类指针或引用来操作派生类。这样的指针或引用具有行为的多态性,就好像它们同时具有多种形态。C++允许你通过基类指针和引用来操作派生类数组。不过这根本就不是一个特性,因为这样的代码几乎从不如你所愿地那样运行。 假设你有一个类BST(比如是搜索树对象)和继承自BST类的派生类BalancedBST:class BST { ... };class BalancedBS原创 2015-08-20 18:52:37 · 436 阅读 · 0 评论 -
利用重载避免隐式类型转换(More Effective C++_21(效率))
class UPInt { // unlimited precision public: // integers 类 UPInt(); UPInt(int value); ...};//有关为什么返回值是const的解释,参见Effective C++ 条款21const UPInt operator+(const UPInt& lhs, const UPInt& rhs);UPInt转载 2015-09-05 16:37:28 · 439 阅读 · 0 评论 -
返回值优化(More Effective C++_20(效率))
我们知道一个返回对象的函数很难有很高的效率,因为传值会调用对象内的构造函数和析构函数;而一些函数必须要返回对象,这是难以避免的,所以,我们关心的重点,并不是去消除返回对象,而是怎么减少返回对象所用的开销上来; 幸好,编译器支持返回值优化,能让编译器消除临时对象的开销;下面我们考虑简单实现一个有理数的代码:#include <iostream>#include<opencv2\core\core.原创 2015-09-05 16:26:47 · 388 阅读 · 0 评论 -
operator new和 new operator的区别(More Effective C++_8(运算符))
一、分析区别首先,我们先对new和delete表达式有深入了解,先看下面的语句string *sp=new string("hello");上述代码,实际上发生了三个步骤,第一步,调用名为operator new 的标准库函数,分配足够大的原始化的未类型化的内存,来保存指定类型的一个对象;第二步,运行该类型的一个构造函数,用于初始化构造对象;最后,返回指向新分配并设定了处置的指针;上述,代码中的ne原创 2015-08-24 19:09:15 · 659 阅读 · 0 评论 -
指针和引用区别(More Effective_C++_1(基础))
区别: (1)引用不能为空,指针可以为空,引用必须需要初始值string& rs;//错误,必须初始化string s("sdf");string rs&=s//正确,指向sstring *ps;//未初始化的指针,有效,但风险高注:这个事实,意味着引用可能会比指针效率更高,因为使用引用,不必测试是否为空,而使用指针,经常需要测试其是否为空(2)指针可以被重新赋值,指向另一个对象,但是引用却总原创 2015-08-18 20:44:28 · 388 阅读 · 0 评论