Dablelv的博客专栏

The blog world of Dablelv

排序:
默认
按更新时间
按访问量

C++以智能指针管理内存资源

C++作为一门应用广泛的高级编程语言,但却没有像Java、C#等语言拥有垃圾回收(Garbage Collection )机制来自动地进行内存管理,这也是C++一直被诟病的一点。C++在发展的过程中,一直致力于内存泄漏的解决,C++虽然基于效率的考虑,没有采用垃圾回收机制,但从C++98开始,推出...

2018-10-13 16:52:38

阅读数:22

评论数:0

C++仿函数

1.为什么要有仿函数 我们先从一个非常简单的问题入手。假设我们现在有一个数组,数组中存有任意数量的数字,我们希望能够计数出这个数组中大于10的数字的数量,你的代码很可能是这样的: #include <iostream> using namespace s...

2018-09-23 01:12:49

阅读数:53

评论数:0

C++纯虚函数与抽象类

1.虚函数定义 虚函数可以毫不夸张的说是C++最重要的特性之一,作为本书中首次提及虚函数的章节,我们先来看一看虚函数的概念。 在基类的类定义中,定义虚函数的一般形式为: Virtual 函数返回值类型 虚函数名(形参表) { 函数体 } 为什么说虚函数是C++最重要的特性之一呢...

2018-09-22 17:10:36

阅读数:44

评论数:0

C++ explicit禁止单参数构造函数隐式调用

1.单参数构造函数隐式调用 C++中单参数构造函数是可以被隐式调用的,主要有两种情形会隐式调用单参数构造函数: (1)同类型对象的拷贝构造;即用相同类型的其它对象来初始化当前对象。 (2)不同类型对象的隐式转换。即其它类型对象隐式调用单参数拷贝构造函数初始化当前对象。比如A a=1;就是隐式转换,...

2018-09-19 22:10:30

阅读数:39

评论数:0

C++多态的两种形式

1.多态的概念与分类 多态(Polymorphisn)是面向对象程序设计(OOP)的一个重要特征。多态字面意思为多种状态。在面向对象语言中,一个接口,多种实现即为多态。C++中的多态性具体体现在编译和运行两个阶段。编译时多态是静态多态,在编译时就可以确定接口使用的形式。运行时多态是动态多态,具体...

2018-09-19 17:02:26

阅读数:67

评论数:0

C++ typename的双重含义

1.模板类型参数申明 使用模板时,在申明模板类型参数时,我们经常有如下两种申明方式: //方式一 template <class T> CTest; //方式二 templat...

2018-09-18 00:56:45

阅读数:61

评论数:0

C++ 模板元编程简介

1.概述 模板元编程(Template Metaprogramming,TMP)是编写生成或操纵程序的程序,也是一种复杂且功能强大的编程范式(Programming Paradigm)。C++模板给C++提供了元编程的能力,但大部分用户对 C++ 模板的使用并不是很频繁,大致限于泛型编程,在一些...

2018-09-17 20:24:39

阅读数:46

评论数:0

C++模板特化与偏特化

1.模板特化 1.1概述 模板特化(template specialization)不同于模板的实例化,模板参数在某种特定类型下的具体实现称为模板的特化。模板特化有时也称之为模板的具体化,分别有函数模板特化和类模板特化。 1.2函数模板特化 函数模板特化是在...

2018-08-29 10:25:57

阅读数:147

评论数:0

C++17 fold expression

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

2018-08-28 16:23:11

阅读数:73

评论数:0

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实现泛化的delegate 4.总结 ...

2018-08-28 14:51:55

阅读数:72

评论数:0

C++0x 通用属性

1.编译器扩展属性 2.C++11通用属性 2.1语法格式 2.2[[ noreturn ]] 2.3[[carries_dependency]] 3.C++14与C++17通用属性 参考文献 1.编译器扩展属性 C++在不断的发展,但每一阶段的C++标准提供的功能都很难完全满...

2018-08-27 23:57:18

阅读数:67

评论数:0

C++11 原生字符串

1.基本概念与作用 原生字符串(Raw String)指不进行转义“所见即所得”的字符串。很多编程语言早已支持原生字符串,如C#、Python、Shell等。C++作为一门高级程序设计语言,自然不能自甘落后,从C++11开始,C++也开始支持原生字符串。 很多时候,当我们需要一行字符串的时候,...

2018-08-24 20:12:15

阅读数:95

评论数:0

C++11 Unicode支持

1.char16_t与char32_t 在C++98中,为了支持Unicode字符,使用wchar_t类型来表示“宽字符”,但并没有严格规定位宽,而是让wchar_t的宽度由编译器实现,因此不同的编译器有着不同的实现方式,GNU C++规定wchar_t为32位,Visual C++规定为16位...

2018-08-24 13:20:26

阅读数:80

评论数:0

C++11继承构造函数

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

2018-08-15 14:43:53

阅读数:103

评论数:0

C++11委托构造函数

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

2018-08-15 14:41:39

阅读数:54

评论数:0

Linux命令(45)——svn命令

1.命令简介 SVN是Apache Subversion的缩写 ,是一个开放源代码的版本控制系统。相较于RCS、CVS,它采用了分支管理系统,它的设计目标就是取代CVS。互联网上很多版本控制服务已从CVS转移到Subversion。Subversion 在 2000 年由 CollabNet开发...

2018-08-13 20:47:27

阅读数:60

评论数:0

C++11 POD类型

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

2018-08-09 11:50:33

阅读数:59

评论数:0

STL四种智能指针

STL一共给我们提供了四种智能指针:auto_ptr、unique_ptr、shared_ptr和weak_ptr,auto_ptr是C++98提供的解决方案,C+11已将将其摒弃,并提出了unique_ptr作为auto_ptr替代方案。虽然auto_ptr已被摒弃,但在实际项目中仍可使用,但建...

2018-08-07 11:25:13

阅读数:123

评论数:0

C++异常处理的开销

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

2018-08-06 23:07:54

阅读数:53

评论数:0

C++使用引用捕获异常

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

2018-08-06 20:46:46

阅读数:54

评论数:0

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