自定义博客皮肤VIP专享

*博客头图:

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

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

博客底图:

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

栏目图:

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

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

-+

Dablelv 的博客专栏。

The blog world of Dablelv

  • 博客(18)
  • 资源 (9)
  • 问答 (41)
  • 收藏
  • 关注

原创 C++ 模板特化与偏特化

文章目录1.模板特化1.1 概述1.2 函数模板特化1.3 类模板特化2.模板偏特化2.1 概述2.2 函数模板偏特化2.3 类模板偏特化3.模板类调用优先级参考文献1.模板特化1.1 概述模板特化(template specialization)不同于模板的实例化,模板参数在某种特定类型下的具体实现称为模板特化。模板特化有时也称之为模板的具体化,分别有函数模板特化和类模板特化。1.2 函数模板特化函数模板特化指函数模板在模板参数为特定类型下的特定实现。查看以下示例:#include <i

2018-08-29 10:25:57 24437 17

原创 C++17 fold expression

C++11 增加了一个新特性变参模板(variadic template),它可以接受任意个模版参数,参数包不能直接展开,需要通过一些特殊的方法,比如函数参数包的展开可以使用递归方式或逗号表达式,在使用的时候有点难度。C++17 解决了这个问题,通过折叠表达式(fold expression)简化对参数包的展开。

2018-08-28 16:23:11 4025 2

原创 C++11 变参模板

1.概述2.可变模版参数的展开2.1变参函数模版2.1.1递归函数方式展开参数包2.1.2逗号表达式展开参数包2.2变参类模版2.2.1偏特化与递归方式展开2.2.2继承方式展开3.变参模板的应用3.1消除重复代码3.2实现泛化的delegate4.总结参考文献1.概述变参模板(variadic template)是C++11新增的最强大的...

2018-08-28 14:51:55 2649

原创 C++0x 通用属性

1.编译器扩展属性2.C++11通用属性2.1语法格式2.2[[ noreturn ]]2.3[[carries_dependency]]3.C++14与C++17通用属性参考文献1.编译器扩展属性C++在不断的发展,但每一阶段的C++标准提供的功能都很难完全满足现实需求,于是为了弥补标准的不足或者扩增特性应用场景所需的特性,各大C++编译器厂商多多少少在标准之...

2018-08-27 23:57:18 1477

原创 C++11 原生字符串

由于C++11对Unicode的支持,原生字符串的定义方式可以与Unicode字符串结合使用,定义UTF-8、UTF-16和UTF-32的原生字符串,将其前缀分别设置为u8R、uR和UR即可。可以看出,原生字符串会被编译器自动连接在一起,整个字符串“你好=hello”含有两个UTF-8编码的中文字符,共占6字节,和6个ASCII字符,再加上自动生成的空字符\0,字符串共占用13字节空间。在使用sizeof运算符计算不同编码的相同字符串时,得到的结果是不通的,大小跟其申明的类型是完全一致的。

2018-08-24 20:12:15 13466 3

原创 C++11 Unicode 支持

1.char16_t与char32_t在C++98中,为了支持Unicode字符,使用wchar_t类型来表示“宽字符”,但并没有严格规定位宽,而是让wchar_t的宽度由编译器实现,因此不同的编译器有着不同的实现方式,GNU C++规定wchar_t为32位,Visual C++规定为16位。由于wchar_t宽度没有一个统规定,导致使用wchar_t的代码在不同平台间移植时,可能出现问题。...

2018-08-24 13:20:26 7220 5

原创 C++11 继承构造函数

1.简介子类为完成基类初始化,在C++11之前,需要在初始化列表调用基类的构造函数,从而完成构造函数的传递。如果基类拥有多个构造函数,那么子类也需要实现多个与基类构造函数对应的构造函数。class Base{public: Base(int va) :m_value(va), m_c(‘0’){} Base(char c) :m_c(c) , m_value(0){...

2018-08-15 14:43:53 27837 11

原创 C++11 委托构造函数

1.简介委托构造函数(Delegating Constructor)由C++11引入,是对C++构造函数的改进,允许构造函数通过初始化列表调用同一个类的其他构造函数,目的是简化构造函数的书写,提高代码的可维护性,避免代码冗余膨胀。通俗来讲,一个委托构造函数使用它所属的类的其他构造函数执行自己的初始化过程,或者说它把自己的一些(或者全部)职责委托给了其他构造函数。和其他构造函数一样,一个委托...

2018-08-15 14:41:39 4491

原创 svn command

SVN 是 Apache Subversion 的缩写 ,是一个开源的版本控制系统。相较于 RCS、CVS,它采用了分支管理系统,它的设计目标是取代 CVS。互联网上很多版本控制服务已从 CVS 转移到 Subversion。Subversion 在 2000 年由 CollabNet 开发,后成为 Apache 软件基金会的一个项目。svn 是 Apache Subversion 的客户端,完成与 Apache Subversion 服务端的交互,实现版本控制。

2018-08-13 20:47:27 611 1

原创 C++11 POD 类型

POD(Plain Old Data,普通旧数据)类型是从C++11开始引入的概念,Plain代表它是一个普通类型,Old代表它可以与C兼容。通俗的讲,一个类、结构、共用体对象或非构造类型对象能通过二进制拷贝(如memcpy())后还能保持其数据不变正常使用的就是POD类型的对象。严格来讲,一个对象既是普通类型(Trivial Type)又是标准布局类型(Standard-layout Type)...

2018-08-09 11:50:33 3282 1

原创 C++ STL 四种智能指针

auto_ptrunique_ptrshared_ptrweak_ptrauto_ptr 是 C++98 提出的,C++11 已将其摒弃,并提出了 unique_ptr 替代 auto_ptr。虽然 auto_ptr 已被摒弃,但在实际项目中仍可使用,但建议使用更加安全的 unique_ptr,后文会详细叙述。shared_ptr 和 weak_ptr 则是 C+11 从准标准库 Boost 中引入的两种智能指针。

2018-08-07 11:25:13 73197 25

原创 C++ 异常处理的开销

C++ 异常是 C++ 有别于 C 的一大特性 ,异常处理机制给开发人员处理程序中可能出现的意外错误带来了极大的方便,但为了实现异常,编译器会引入额外的数据结构与处理机制,增加了系统的开销。天下没有免费的午餐,使用异常时我们必须了解其带来的开销和问题。

2018-08-06 23:07:54 2620

原创 C++ 使用引用捕获异常

catch子句捕获异常时既可以按值传递,也可以按照引用传递,甚至按照指针传递,但推荐使用引用捕获异常。考察如下程序:#include &lt;iostream&gt;using namespace std;class Base{public: Base() { cout &lt;&lt; "Base's constructor" &lt;&lt; ...

2018-08-06 20:46:46 2568 2

原创 C++ 特性使用建议

使用引用替代指针且所有不变的引用参数必须加上const。在C 语言中,如果函数需要修改变量的值,参数必须为指针,如,在 C++ 中,函数还可以声明引用参数,定义引用参数防止出现 (*pval)++ 这样丑陋的代码。像拷贝构造函数这样的应用也是必需的,而且更明确,不接受 NULL 指针。建议:只在定义移动构造函数与移动赋值操作时使用右值引用,区分std::move与std::forward的作用。右值引用是一种只能绑定到临时对象的引用的一种,其语法与传统的引用语法相似,例如声明了一个其参数是一个字符串的右值引

2018-08-05 23:29:00 976

原创 C++ 编码风格建议

尽可能精简行数,函数返回类型和函数名在同一行,参数也尽量放在同一行,如果放不下就对形参分行且与第一个形参对齐,或者另起一行且缩进四格,分行方式与函数调用一致。// 函数返回类型、函数名和参数放在同一行 ReturnType ClassName :: functionName(Type parName1 , Type parName2) {

2018-08-04 20:30:03 1842 1

原创 C++ 命名方式建议

一个大型项目,参与开发人员众多,每个人的编码风格迥异,为保持代码风格统一,提高代码可读性与可维护性,一个重要的约定就是命名方式。良好统一的命名方式能让我们在不需要去查找类型声明的条件下快速了解某个名字代表的含义。命名涉及目录、文件、名字空间、类型、函数、变量、枚举、宏等等。事实上,我们对代码的理解和认知是非常依赖这些命名方式。关于命名约定,一个通用规则就是名称应具有描述性,少用缩写。尽可能使用...

2018-08-03 22:22:33 5749

原创 C++ 注释风格建议

有个笑话,一位从不写注释的程序员在编写一段复杂的代码时,骄傲地认为这段代码只有自己和上帝知道它是干嘛的,等过了一段时间再回顾时,发现没有注释,感叹到这段代码现在只有上帝知道它是干嘛的。可见,注释是项目中不可或缺的部分,不仅是为了帮助团队其它人员快速理解代码,也是帮助自己快速恢复对代码功能的了解。随意,我们对注释不过要与吝啬,该书写时就书写。虽然注释书写起来有点麻烦,但是为了提供程序本身额外的信...

2018-08-02 12:52:23 22089

原创 C++ 认识容器的迭代器

的方法是和另外一个迭代器做比较,这个迭代器一般是集合的末尾,当我们的索引值等于末尾的索引值end时,认为迭代器已经达到了末尾。(1)拥有begin和end函数,它们均返回迭代器 ,其中end函数返回一个指向集合末尾,但是不包含末尾元素的值,即用集合范围来表示,一个迭代器的范围是 [ begin, end ) 一个左闭右开区间。但是,当删除多个元素时,程序会出现崩溃。原因是通过迭代器删除指定的元素时,指向那个元素的迭代器将失效,如果再次对失效的迭代器进行 ++ 操作,则会带来未定义行为,程序崩溃。

2018-08-01 21:43:10 886 2

tinyxml2+示例代码+介绍文档

资源包含2015.9.23从官网下载的tinyxml2的源码和自己编写的示例代码还有介绍文档,容易上手。官网的示例代码和文档晦涩难懂,才自己整理。

2015-09-26

TinyXML2.rar

C++轻量XML文件解析库!用于C++项目中进行XML文件的读取和创建!使用方法见本人blog!

2015-03-14

Voronoi Diagram维诺图

内包括C#实现的Voronoi Diagram源码,可执行程序和实验报告,请用VS2012或以上版本打开原工程文件。

2015-03-02

C版六中常见排序算法

C语言实现冒泡排序、快速排序、选择排序、堆排序、简单插入排序和希尔排序,并附上代码注释

2013-11-26

C语言版本Linux环境下MD5加密函数

C语言版本Linux环境下MD5加密函数,需要在Linux换进下运行。经测试验证,完全正确,内附带使用说明,谢谢

2013-11-05

C语言MD5算法实现

C语言实现MD5,经测试验证,散列过程完全正确,可供开发者使用!

2013-10-24

C#简单词法分析器

用C#编写的词法分析器,简单实用,适合上交编译原理实验作业,并附有实验报告,用VS2010即可打开原工程.绝对实用!

2013-05-06

C#编写代码生成器源码

C#编写的可连接数据库,进行模板代码生成器,为源码,用VS2010打开。

2013-04-04

JSP连接数据库简单留言板实验报告

贴有源码,JSP连接MySql数据库制作的简易的留言板,并附上实验报告

2013-03-27

HTML 如何设置图片宽高分别为原宽高的不同比例?

2020-08-22

Google C++编程风格指南中6.10节流中不支持字符串操作符重新排序 什么意思

2018-08-05

5.5.50-MariaDB的索引为什么在 where in子句中无法生效,MySQL可以?

2018-07-07

C++模板元编程和编写模板有什么区别?

2018-06-17

g++ -S将源码编译成汇编代码,使用的是哪个工具?

2018-06-11

从长度为n的数组中找出同时满足下面两个条件的所有元素,时间复杂度为O(n)。

2018-05-28

为什么C++局部数组变量地址间隔是16字节的倍数?

2018-05-17

缓冲溢出,为什么不报错?

2018-05-16

RLF、HRLF控制字符到底是什么

2018-05-10

printf关于浮点数的四舍五入的奇怪问题?

2018-05-09

stringstream的输入与输出的用法

2018-03-19

使用JS如何获取剪贴板内容

2018-03-06

Linux命名管道为什么叫FIFO?

2018-02-07

Linux下printf与wprintf不能同时使用?

2018-01-15

C标准库函数setvbuf的名称全称

2018-01-15

mysql count distinct 加条件

2017-06-15

awk如何获取除最后一行的所有行?

2017-05-19

rz命令如何上传文件夹

2017-05-07

CSS浮动为什么不会遮盖同级元素

2015-09-17

Linux下系统调用execl会等待一段时间才执行指定的可执行程序?

2015-09-11

为什么 Go range slice 时通过下标和值拷贝的性能是一样的?

2022-03-17

反向代理的上游服务指的是什么?

2021-03-12

Golang 接口类型可以有数据成员吗

2020-12-02

GoLand 如何自动批量换行

2020-10-07

Golang 如何进行标准错误输出

2019-12-24

git branch -dr origin/<branchname> 无法删除远端分支

2019-09-16

为什么 Golang 中序列化与反序列的函数一般命名为 marshal 与 Unmarshal 呢?

2019-06-26

golang main包可以被import吗

2019-06-11

golang小数默认是float32还是float64?

2019-05-28

golang const 可以修饰函数形参吗

2019-05-28

ldconfig命令全称是什么呢?

2019-04-02

golang的struc成员后跟字符串有什么作用?

2019-03-15

Linux中 链接器 ld 命令的全称是什么英文单词?

2019-03-12

ssh命令默认端口如何查看

2019-02-15

ssh客户端为什么不指定端口也可以登录成功

2019-02-15

C/C++的预处理文件的后缀为什么约定为.i

2019-01-24

go为什么不能获取字符串某个字符地址?

2019-01-13

date命令将时间戳转为可读时间为什么需要加@符号

2018-12-06

GNU C++定义对象时对象名称被括号包围且前面有个下划线是什么意思

2018-10-09

git merge可以操作远端分支吗?

2018-08-16

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

TA关注的人

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