![](https://img-blog.csdnimg.cn/20201014180756916.png?x-oss-process=image/resize,m_fixed,h_64,w_64)
C++
文章平均质量分 60
期待_明天
南理工一名普通小硕,方向为数字图像质量评价算法,对编程图像感兴趣
展开
-
隐式类类型转换
C++ primer 中有这么一句话:可以用单个实参来调用的构造函数定义了从形参类型到该类型的一个隐式转换。这么解释:比如有个类A的对象a的成员函数的参数应该是类A的对象,但是把一个别的类型B的对象b传进去了,而且这个对象b的类型恰好是A的单参数构造函数参数类型,这时系统就用这个b自作聪明的创建了一个类A的临时对象c,虽然c和a都是A类型,但是是不同的对象。这种隐式转换有很大风险,可以转载 2013-12-13 11:09:08 · 395 阅读 · 0 评论 -
Effective C++读书笔记(11)
条款15:在资源管理类中提供对原始资源的访问资源管理类需要一个函数可以将RAII class对象转移到其所包含的原始资源,可以通过显式转换或隐式转换完成。显式转换:常在RAII class中定义一个get成员函数,用于返回RAII class内部的原始资源。也可以通过重载*或者->运算符。隐式转换:重载类型转换运算符。条款16:成对使用new和delete时要采取相同形式原创 2014-02-17 21:46:19 · 404 阅读 · 0 评论 -
Effective C++读书笔记(12)
条款18:让接口容易被正确使用,不易被误用欲开发一个“容易被正确使用,不容易被误用”的接口,首先必须考虑客户可能做出什么样的错误。1、许多用户会出现对接口所传实参不对应或者取值范围有问题的错误。这些错误可以因为导入新类型而获得预防,可以通过简单地外覆类型来区别参数类型。(用成熟且经过充分锻炼的classes并封装其内数据比简单使用structs好)对于限制取值范围常见有两种方法:1、利原创 2014-02-18 11:34:52 · 415 阅读 · 0 评论 -
Effective C++读书笔记(9)
条款13:以对象管理资源将动态分配的资源放进对象内,成为对象的成员变量,我们便可以依赖于C++的析构函数自动调用机制确保资源被释放。智能指针:用智能指针可以有效缓解C++的内存回收问题:C++没有自动内存回收机制,每次new出来的堆内存都要手动delete(std中的auto_ptr即是智能指针)。对于编译器来说,智能指针实际是一个栈对象,并非指针类型,在栈对象生命期即将结束时,智原创 2014-02-17 19:15:12 · 375 阅读 · 0 评论 -
重载类型转换操作符 遇到的问题
原文链接:http://www.cnblogs.com/chinazhangjie/archive/2010/08/19/1803049.html今天我对这段代码产生了质疑:operator double (){ return static_cast (sum) /static_ca转载 2014-02-17 21:20:02 · 386 阅读 · 0 评论 -
cross-dll和智能指针
来源:http://flintning.blog.sohu.com/117761263.html最近在做一个项目,存在大量的模块(exe或dll)间数据传递,希望避免频繁的数据复制降低处理效率,即一个模块创建的数据指针可以直接传递给另一个模块。首先考虑的就是所谓的cross-dll问题,即一个模块分配的内存不应该由另一个模块释放,因为两个模块可能使用不同版本的C运行期库,甚至不转载 2014-02-18 11:35:43 · 1405 阅读 · 0 评论 -
Effective C++读书笔记(13)
条款19:设计class犹如设计typeclass的设计规范:1、新type的对象应该如何被创建和销毁?2、对象的初始化和对象的赋值该有什么样的区别?3、新type的对象如果被passed by value,意味着什么?(copy构造函数)4、什么是新type的“合法值”?5、你的新type需要配合某个继承图系么?6、你的新type需要什么样的转换?7、什么样的操作符和函数对此新type而言是原创 2014-02-18 15:30:14 · 425 阅读 · 0 评论 -
Effective C++读书笔记(14)
条款21:必须返回对象时,别妄想返回其reference当函数要返回一个对象时,不要返回pointer或者reference指向local stack对象,会返回一个未定义的pointer或reference;也不要返回reference指向一个heap-allocated对象,会造成内存泄露;也不要返回pointer或者reference指向local static对象,在需要多个对象时会造原创 2014-02-18 17:46:19 · 438 阅读 · 0 评论 -
Effective C++读书笔记(15)
条款23:宁以non-member、non-friend替换member函数对类里面的便利函数(不是完成某一特定功能,只是通过调用其他方法整合方法)在既可以选择成为member函数和non-member、non-friend函数的时候一般定义为non-member、non-friend函数更合理。因为member函数比non-member、non-friend函数的封装性差(因为member函原创 2014-02-18 20:12:21 · 516 阅读 · 0 评论 -
sizeof,终极无惑(上)
来源:http://blog.csdn.net/freefalcon/article/details/548390. 前向声明sizeof,一个其貌不扬的家伙,引无数菜鸟竟折腰,小虾我当初也没少犯迷糊,秉着“辛苦我一个,幸福千万人”的伟大思想,我决定将其尽可能详细的总结一下。但当我总结的时候才发现,这个问题既可以简单,又可以复杂,所以本文转载 2014-03-27 14:13:33 · 438 阅读 · 0 评论 -
Effective C++读书笔记(8)
条款10:令operator=返回一个reference to *this为了实现连锁赋值,赋值操作符必须返回一个reference指向操作符的左侧实参。条款11:在operator=中处理“自我赋值”对于赋值操作符应能实现对象的自我赋值。否则会造成“在停止使用资源之前意外释放了它”。常见的解决方案有三种:1、赋值之前进行证同测试,比较“源对象”和“目标对象”的地址。if(th原创 2014-02-17 15:52:47 · 405 阅读 · 0 评论 -
Effective C++读书笔记(10)
条款14:在资源管理类中小心copying行为并非所有资源都是heap-base,这些资源不适合直接应用智能指针作为资源管理类。需要建立自己的资源管理类。例如:处理类型为Mutex的互斥器对象,共有lock和unlock两个函数可用:void lock(Mutex* pm);void unlock(Mutex* pm);我们建立对应资源管理类控制互斥器的锁定和解锁。class Loc原创 2014-02-17 20:40:31 · 395 阅读 · 0 评论 -
Effective C++读书笔记(7)
条款8:别让异常逃离析构函数在两个异常同时存在的情况下,程序若不是结束执行就是导致不明确行为。析构函数绝对不要吐出异常,如果一个被析构函数调用的函数可能抛出异常,析构函数应该捕捉任何异常,常见处理方法有:1、如果抛出异常就结束程序。2、吞下异常,并记录下其记录。一种更加合理的方法是将这个异常放在来自析构函数以外的某个函数中去,并将其给程序员去调用,一次同时析构函数内仍包含一个”双保险“原创 2014-02-15 15:41:01 · 392 阅读 · 0 评论 -
Effective C++读书笔记(2)
让自己习惯C++条款1:视C++为一个语言联邦C++可以看作是四种次语言组成的:C(包括区块、语句、预处理器、内置数据类型、数组、指针等);Object-Oriented C++(主要表现C++的面对对象的性质,包括类、封装、继承、多态性、virtual函数等);Template C++(为C++泛型编程部分);STL(是模版程序库,主要包括容器、迭代器、算法以及函数对象)原创 2013-12-16 15:48:09 · 423 阅读 · 0 评论 -
Effective C++读书笔记(1)
导读1.定义式是编译器对此对象拨发内存的地点。2.explicit声明的构造函数可被用于禁止编译器执行非预期的类型转换。注:对于单个参数的构造函数定义了从该形参类型到该类型的一个隐形转换。explicit只对构造函数起作用,用来抑制隐式转换。 class A { A(int a); }; int Functio原创 2013-12-16 14:57:56 · 345 阅读 · 0 评论 -
Effective C++读书笔记(3)
条款3: 尽可能使用const在全局作用域内定义的非const变量默认为extern,而要在别的文件中使用const变量,必须显式的声明为extern。声明iterator为const(const vector::iterator)等同于T* const,表示迭代器不能够移动,要表示迭代器所指向的值不能变化时用const_iterator。在一个函数声明式中,const可以和返回值、各原创 2014-01-04 19:08:26 · 342 阅读 · 0 评论 -
Effective C++读书笔记(4)
条款4:确定对象在被使用前已被初始化永远在使用对象前现将其初始化(1.对于无成员的内置类型必须手工完成初始化,2.对于自定义类型交给构造函数(每个构造函数都将对象的每个成员初始化))在构造函数内对各成员进行赋值的操作叫做赋值。对象的成员变量的初始化动作在进入构造函数本体之前,即各成员的default构造函数被调用时(除内置类型)。使用构造函数的成员初值列进行初始化更为高效,并且在初值列原创 2014-01-04 19:37:59 · 413 阅读 · 0 评论 -
Argument Dependent Lookup (ADL, a.k.a. Koenig Lookup) 解析
来源:http://hi.baidu.com/lovelink/item/cc6ca9e0183224accf2d4facADL,参数相关查找,也称作为Koenig查找(以Andrew Koenig的名字命名,有兴趣可以看Scott Meyer的文章The Most Important C++ People...Ever),是指在编译器对无限定域的函数调用进行名字查找时,所应用转载 2014-02-20 20:59:37 · 483 阅读 · 0 评论 -
最好使用C++转型操作符
来源:http://www.cnblogs.com/hazir/archive/2012/04/14/2447251.html旧式的C转型方式,几乎允许你将任何类型转换为任何其它类型,有其自身的缺陷,表现在以下两方面:不能更精确地指明其转型的意图。如将一个pointer-to-base-class-object 转型为一个pointer-to-derived转载 2014-02-20 22:32:51 · 385 阅读 · 0 评论 -
尽量不要使用#define,而是用const、enum、inline替换。
为什么这么说呢?或许很多程序员已经习惯在文件开始使用大量的#define语句。例如:这里程序文件开头有如下#define语句 #define N 10 #define PI 3.14 #define MAX转载 2014-02-14 14:46:10 · 477 阅读 · 0 评论 -
Effective C++读书笔记(5)
条款5:了解C++默默编写并调用哪些函数默认的函数包括:构造函数、copy构造函数、copy赋值运算符和析构函数,所有这些函数都是public且inline。这些函数仅当被调用的时候才会被编译器创建出来。除非这个class的base class自身声明有virtual析构函数,则这个class的析构函数是non-virtual的。default copy赋值运算符在遇到引用成员变量或c原创 2014-02-14 16:50:52 · 383 阅读 · 0 评论 -
Effective C++读书笔记(6)
条款7:为多态基类声明virtual析构函数栈空间和堆空间:一个由C/C++编译的程序占用的内存主要分为以下几个部分:1:栈区(stack):编译器自动分配释放,存放函数的参数值、局部变量的值等,其操作方式类似于数据结构的栈。2:堆区(heap):一般是由程序员分配释放,若程序员不释放的话,程序结束时可能由OS回收,分配方式类似于链表。3:全局区(static):存储全局变量和静态变量,初原创 2014-02-15 12:47:11 · 410 阅读 · 0 评论 -
Effective C++读书笔记(16)
条款25:考虑写出一个不抛出异常的swap函数swap函数是异常安全性编程的脊柱,以及用来处理自我赋值可能性的一个常见机制。缺省情况下,swap动作可由标准程序库提供的swap算法完成。(对象需要支持copying函数)namespace std{template void swap(T& a, T& b){ T temp(a); a = b;原创 2014-02-20 21:36:00 · 403 阅读 · 0 评论