自定义博客皮肤VIP专享

*博客头图:

格式为PNG、JPG,宽度*高度大于1920*100像素,不超过2MB,主视觉建议放在右侧,请参照线上博客头图

请上传大于1920*100像素的图片!

博客底图:

图片格式为PNG、JPG,不超过1MB,可上下左右平铺至整个背景

栏目图:

图片格式为PNG、JPG,图片宽度*高度为300*38像素,不超过0.5MB

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

-+
  • 博客(3)
  • 资源 (2)
  • 收藏
  • 关注

原创 c++解析二维码

使用ffmpeg对图片进行解码,zbar识别二维码。我测试环境为: windows下32位, mingw与msvc编译器ffmepg相关库下载地址:动态导入库和头文件:https://ffmpeg.zeranoe.com/builds/win32/shared/ffmpeg-20190813-8cd96e1-win32-shared.zip动态运行库:https://ffmpeg...

2019-08-14 00:37:06 1539

翻译 笔记2。auto类型推导

与模板类型推导基本一致(有几个特殊情况):template<typename T>f(T& i){}const int x = 5;f(x); //T推导为const int,函数模板的形参T&最终被推导为const int&auto& v = x;//讲auto看成模板参数T,auto&看成T&,x看成f(x)传入的实参...

2019-06-21 00:17:22 138

翻译 笔记1。模板类型推导

分三种情况:1.形参类型是引用(左值引用和右值引用,而不是通用引用(Universal Reference))或者指针。(1)当实参是引用时,引用会被忽略。然后根据实参和形参推导出T类型。template <typename T>void f( T& param ){} //T&是个左值引用int x;const int cx = x;const...

2019-06-20 19:45:23 134

PlantUML中文文档

代码绘图文档

2023-05-16

qmlbook中文版

QML是一种描述性的脚本语言,文件格式以.qml结尾。语法格式非常像CSS(参考后文具体例子),但又支持javascript形式的编程控制。我个人认为它结合了QtDesigner UI和QtScript的优点。QtDesigner可以设计出·ui界面文件,但是不支持和Qt原生C++代码的交互。QtScript可以和Qt原生代码进行交互,但是有一个缺点,如果要在脚本中创建一个继承于QObject的图形对象非常不方便,只能在Qt代码中创建图形对象,然后从QtScript中进行访问。而QML可以在脚本里创建图形对象,并且支持各种图形特效,以及状态机等,同时又能跟Qt写的C++代码进行方便的交互,使用起来非常方便。

2018-06-24

effective c++中文第三版

条款01:视C++为一个语言联邦 1、C、Obeject-OrientedC++、Template C++、STL 条款02:尽量以const、enum、inline替换#define 1、对于纯常量,最好以const对象或enums替换#define。(const有符号表便于输出调试信息、有范围scope可只设定类内常量、可封装带修饰符、类型安全。Enum不会导致非必要的内存分配。#define只用于预处理) 2、对于形似函数的宏,最好改用inline函数替换#define。 条款03:尽可能使用const 1、将某些东西声明为const可帮助编译器侦查出错误用法。const可被施加于任何作用域的对象、函数参数、函数返回类型、成员函数主题。 2、编译器强制实施bitwiseconstness,但你编写程序时应该使用“概念上的常量性mutable” 3、档const和non-const成员函数有着实质等价的实现时,令non-const版本调用const版本可避免代码重复。 条款04:确定对象被使用前已先被初始化 1、为内置型对象进行手工初始化,因为C++不保证初始化他们 2、构造函数最好使用成员出事列(memberinitialization list),而不要在构造函数本体内使用赋值操作(提高效率)。初始列列出的成员变量,其排列次序应该和他们在class中的声明次序相同。 3、为免除“跨编译单元之初始化次序“问题,请以localstatic对象替换non-local static对象 二、构造、析构、赋值运算 条款05:了解C++默默编写并调用哪些函数 1、编译器可以暗自为class创建default构造函数、copy构造函数、copyassignment操作符,以及析构函数 条款06:若不想使用编译器自动生成的函数,就该明确拒绝 1、为驳回编译器自动提供的技能,可将相应的成员函数声明为private并且不予实现。使用像Uncopyable这样的base class也是一种做法。 条款07:为多态基类声明virtual析构函数 1、polymorphic(带多态性质的)baseclasses应该声明一个virtual析构函数。如果class带有任何virtual函数。它应该拥有一个virtual析构函数。 2、Classse的设计目的如果不是作为baseclasses使用,或不是为了具备多态性,就不该声明virtual析构函数。 条款08:别让异常逃离析构函数 1、析构函数绝对不要吐出异常。如果一个被析构函数调用的函数可能抛出异常,析构函数应该捕捉任何异常,然后吞下它们(不传播)或者结束程序。 2、如果客户需要对某个操作函数运行期间抛出的异常做出反应,那么classs应该提供一个普通函数(而非在析构函数中)执行该操作。 条款09:绝不在构造和析构过程中调用virtual函数 1、在构造和析构期间不要调用virtual函数,因为这类调用从不下降至derived class(在base构造函数中调用virtual函数时调用base class的,而不是derived class的)。而应该将必要的参数从derived的构造函数传递给base的构造函数 条款10:令operator=返回一个refrence to *this 条款11:在operator=中处理“自我赋值” 1、确保当对象自我赋值时operator=有良好行为。其中技术包括比较“来源对象”和“目标对象”的地址、精心周到的语句顺序、及其copy-and-swap。 条款12:复制对象时勿忘其每一个成分 1、Copying函数应该确保复制“对象内的所有成员”及“所有base class成分” 2、不要尝试以某个copying函数实现另一个copying函数。应该将共同机能放进第三个函数中,并由两个coping函数共同调用。 三、资源管理 条款13:以对象管理资源 1、为防止资源泄露,请使用RAII对象,他们在构造函数中获得资源并在析构函数中释放资源。 2、两个常被使用的RAII classes分别是tr1::shared_ptr和auto_ptr(他们都不适合管理new[]分配的资源。shared_ptr可以知道删除器函数)。前置通常是较佳选择,因为其copy行为比较直观。若选择auto_ptr,复制动作会使它(被复制物)指向null。 条款14:在资源管理类中小心coping行为 1、复制RAII(resourceacquisition is initialzation)对象必现一并复制它所管理的资源,所以资源的copying行为决定RAII对象的copying行为。 2、普通而常见的RAII classcopying行为是:抑制copying、施以引用计数法。不过其他行为也都可能被实现。 条款15:在资源管理类中提供对原始资源的访问 1、API往往要求访问原始资源(rawresource),所以每一个RAII class应该提供一个“取得其所管理之资源”的办法。 2、对原始资源的访问可能经由显示转换(XXXhandle.get())或隐式转换(operatorXXX() const)。一般而言显式转换比较安全,但隐式转换对客户的比较方便。 条款16:成对使用new和delete时要采用相同的形式 1、如果你再new表达式中使用[],必须在相应的delete表达式中也使用[](尽量使用string、vector代替)。 条款17:以独立语句将newed对象置入智能指针 1、以独立语句(单独放一行写)将newed对象置于智能指针内。如果不这样做,一但中间有异常抛出,有可能导致难以察觉的资源泄露 四、设计与声明 条款18:让接口容易被正确使用,不易被误用 1、好的接口很容易被正确使用,不容易被误用。 2、“促进正确使用”的办法包括接口的一致性,以及与内置类型的行为兼容。 3、“阻止误用”的办法包括建立新类型、限制类型上的操作,束缚对象值,及其消除客户的资源管理责任。 4、tr1::shared_ptr支持定制型删除器(customdeleter)。可防止DLL问题,可被用来自动解除互斥锁(mutex) 条款19:设计class犹如设计type

2018-06-24

空空如也

TA创建的收藏夹 TA关注的收藏夹

TA关注的人

提示
确定要删除当前文章?
取消 删除