自定义博客皮肤VIP专享

*博客头图:

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

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

博客底图:

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

栏目图:

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

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

-+
  • 博客(29)
  • 收藏
  • 关注

转载 【C++】指针与数组

  由上可知,在一些情况下数组的操作实际上是指针的操作,这一结论有很多隐含的意思。其中一层意思是当使用数组作为auto变量的初始值时,推断得到的类型是指针而非数组: int ia[] = {0, 1, 2, 3, 4, 5, 6, 7, 8, 9}; //ia是一个含有10个整数的数组 auto ia2(ia); //ia2是一个整型指针,指向ia的第一个元...

2019-09-23 20:10:00 150

转载 【C++】decltype类型说明符

  有时会遇到这种情况:希望从表达式的类型推断出要定义的变量类型,但是不想用该表达式的值初始化变量。为了 满足这一要求,C++新标准引入了第二种类型说明符decltype,它的作用是选择并返回操作数的数据类型。在此过程中,编译器分析表达式并得到它的类型,却不实际计算表达式的值: decltype(f()) sum = x; //sum的类型就是f的返回类型Vie...

2019-09-20 19:42:00 284

转载 【C++】auto类型说明符

  编程时常常需要把表达式的值赋给变量,这就要求在声明变量的时候清楚地知道表达式的类型。然而要做到这一点并非那么容易,有时甚至根本做不到。为了解决这个问题,C++新标准引入了auto类型说明符,用它就能让编译器替我们去分析表达式所属的类型。和原来那些只对应一种特定类型的说明符(例如double)不同,auto让编译器通过初始值来推算变量的类型。显然,auto定义的变量必须有初始值:...

2019-09-20 15:16:00 242

转载 【C++】constexpr和常量表达式

  常量表达式(const expression)是指值不会改变并且在编译过程就能得到计算结果的表达式。显然,字面值属于常量表达式,用常量表达式初始化的const对象也是常量表达式。后面将提到,C++语言有几种情况下是要用到常量表达式的。  一个对象(或者表达式)是不是常量表达式由它的数据类型和初始值共同决定,例如: const int max_files = 20...

2019-09-19 17:37:00 165

转载 【C++】顶层const和底层const

  如前所述,指针本身是一个对象,它又可以指向另外一个对象。因此,指针本身是不是常量以及指针所指的是不是一个常量就是两个独立的问题。用名字顶层const(top-level const)表示指针本身是个常量,用名词底层const(low-level const)表示指针所指的对象是一个常量。  更一般的,顶层const可表示任意的对象是常量,这一点对任何数据类型都适用,如算术类型、类...

2019-09-19 15:35:00 178

转载 【C++】迭代器的类型

  迭代器本质上是什么?当然,任何一种特定的迭代器都是某种类型的对象。不过,迭代器的类型非常多,毕竟每种迭代器都是与某种特定容器类型相关联的。它需要保存一些必要的信息,以便我们对容器执行某些特定的任务。因此,有多少种容器就有多少种迭代器,有多少中特殊要求就有多少种迭代器。  vector的迭代器可能就是一个普通指针,因为就引用vector中的元素而言指针再恰当不过了:或者,vecto...

2019-09-11 14:40:00 1383

转载 【C++】枚举类型

  枚举类型(enumeration)使我们可以将一组整形常量组织在一起。和类一样,每个枚举类型定义了一种新的类型。枚举属于字面值常量类型。  C++包括两种枚举:限定作用域的和不限定作用域的。C++11新标准引入了限定作用域的枚举类型(scoped enumeration)。定义限定作用域的枚举类型的一般形式是:首先是关键字enum class(或者等价地使用enum struct...

2019-09-05 14:48:00 208

转载 【I2C】THE I2C-BUS SPECIFICATION

1、Generation of clock signals on the I2C-bus is always the responsibility of master devices; each master generates its own clock signals when transfering data on the bus. Bus clock signals from a...

2019-09-04 20:07:00 930

转载 【c++ primer】【19.2.1】dynamic_cast运算符

  dynamic_cast运算符(dynamic_cast operator)的使用形式如下所示:dynamic_cast<type *>(e)dynamic_cast<type &>(e)dynamic_cast<type &&>(e)其中,type必须是一个类类型,并且通常情况下该类类型应该含有虚函...

2019-09-02 15:13:00 231

转载 【c++ primer】【19.1.1】重载new和delete

  应用程序可以在全局作用域中定义operator new和operator delete函数,也可以将它们定义为成员函数。当编译器发现一条new表达式或delete表达式后,将在程序中查找可供调用的operator函数。如果被分配(释放)的对象是类类型,则编译器首先在类及其子类中查找。此时如果该类含有operator new成员或operator delete成员,则相应的表达式将调用...

2019-08-31 17:36:00 153

转载 【c++ primer】【18.3.5】构造函数与虚继承

  在虚派生中,虚基类是由最底层的派生类初始化的。以我们的程序为例,当创建Panda对象时,构造函数独立控制ZooAnimal的初始化过程。  为了理解这一规则,我们不妨假设当以普通规则处理初始化任务时会发生什么情况。在此例中,虚基类将会在多条继承路径上重复初始化。以ZooAnimal为例,如果应用普通规则,则Raccoon和Bear都会试图初始化Panda对象的ZooAnimal部...

2019-08-31 15:44:00 108

转载 虚继承

  尽管在派生列表中同一个基类只能出现一次,但实际上派生类可以多次继承同一个类。派生类可以通过它的两个直接基类分别继承同一个间接基类,也可以直接继承某个基类,然后通过另一个基类再一次间接继承该类。  举个例子,IO标准库的istream和ostream分别继承了一个共同的名为base_ios的抽象基类。该抽象基类负责保存流的缓冲内容并管理流的条件状态。iostream是另外一个类,它...

2019-08-31 10:29:00 124

转载 元对象系统

  Qt中的元对象系统(Meta-Object System)提供了对象间通信的信号和槽机制、运行时类型信息和动态属性系统。元对象系统是基于一下3个条件的转载于:https://www.cnblogs.com/bootblack/p/11436848.html...

2019-08-30 19:55:00 98

转载 多重继承

在派生类的派生列表中可以包含多个基类:class Bear : public ZooAnimal { /* ... */ };class Panda : public Bear, public Endangered { /* ... */ };每个基类包含一个可选的访问修饰符。一如往常,如果访问说明符被忽略了,则关键字class对应的默认访问说明符是private,关...

2019-08-30 11:19:00 131

转载 【c++ primer】【18.2.2】使用命名空间成员

using声明:扼要概述  一条using声明(using declaration)语句一次只能引用命名空间的一个成员。它使得我们可以清楚地知道程序中到底使用哪个名字。  using声明引入的名字遵守与过去一样的作用域规则:它的有效范围从using声明的地方开始,一直到using声明所在的作用域结束为止。在此过程中,外层作用域中的同名实体将被隐藏。未加限定的名字只能在using声...

2019-08-29 16:25:00 118

转载 【c++ primer】【18.2.1】命名空间的定义

  一个命名空间包含两部分:首先是关键字namespace,随后是命名空间的名字。在命名空间名字后面是一系列由花括号括起来的声明和定义。只要能出现在全局作用域中的声明就能置于命名空间内,主要包括:类、变量(及其初始化操作)、函数(及其定义)、模板及其它命名空间: namespace cplusplus_primer{ class Sales_data {/* ......

2019-08-29 15:13:00 191

转载 【c++ primer】【18.1.4】noexcept异常说明

noexcept运算符  noexcept说明符的实参常常与noexcept运算符(noexcept operator)混合使用。noexcept运算符是一个一元运算符,它的返回值是一个bool类型的右值常量表达式,用于表示给定的表达式是否会抛出异常。和sizeof类似,noexcept也不会求其运算对象的值。  例如,因为我们 声明recoup时使用了noexcept说明符,所...

2019-08-28 19:21:00 308

转载 【模板】模板实参推断和引用

  为了理解如何从函数调用进行类型推断,考虑下面的例子:template <typename T> void f(T &p);其中函数参数p是一个模板类型参数T的引用,非常重要的是记住两点:编译器会引用正常的引用绑定规则;const是底层的,不是顶层的。从左值引用函数参数推断类型  当一个函数参数是模板类型参数的一个普通(左值)引用时(即,形如...

2019-08-28 14:44:00 274

转载 【模板】类型转换与模板类型参数

  与非模板函数一样,我们在一次调用中传递给模板的实参被用来初始化函数的形参。如果一个函数形参的类型使用了模板类型参数,那么它采用特殊的初始化规则。只有很有限的几种类型转换会自动地用于这些实参。编译器通常不是对实参进行类型转换,而是生成一个新的模板实例。  与往常一样,顶层const无论是在形参还是在实参中,都会被忽略。在其它类型转换中,能在调用中应用于函数模板的包括如下两项。...

2019-08-27 16:19:00 564

转载 【模板】效率与灵活性

  对模板设计者所面对的设计选择,标准库智能指针给出了一个很好的展示。  shared_ptr和unique_ptr之间的明显不同是它们管理所保存的指针策略------前者给予我们共享指针所有权的能力;后者则独占指针。这一差异对两个类的功能来说是至关重要的。  这两个类的另一个差异是他们允许用户重载默认删除器的方式。我们很容易地重载一个shared_ptr的删除器,只要在创建或者...

2019-08-27 15:25:00 162

转载 定义模板

模板类的static成员  与其它任何类相同,模板类可以声明static成员:template <typename T> class Foo{public: static std::size_t count() {return ctr;} //其它接口成员private: static std::size_t ctr;...

2019-08-23 19:01:00 200

转载 信号和槽

1、信号和槽的机制概述  信号和槽用于两个对象之间的通信。信号和槽机制是Qt的核心特征,也是Qt不同于其它开发框架的最突出特征。在GUI编程中,当改变了一个部件时,总希望也了解到该变化。更一般来说,我们希望任何对象都可以和其它对象进行通信。例如,用户单击了关闭按钮,则希望可以执行窗口的close()函数来关闭窗口。为了实现对象间的通信,一些工具包中使用了回调(callback)机制,...

2019-08-22 19:55:00 183

转载 虚析构函数

  继承关系对基类拷贝控制最直接的影响是基类通常应该定义一个虚析构函数,这样我们就能动态分配继承体系中的对象了。  如前所述,当我们delete一个动态分配的对象的指针时将执行析构函数。如果该指针指向继承体系中的某个类型,则由可能出现指针的静态类型与被删除的动态类型不符的情况。例如,如果我们delete一个Quote*类型的指针,则该指针有可能实际指向了一个Bulk_quote类型的...

2019-08-21 14:30:00 184

转载 继承中的类的作用域

  每个类定义自己的作用域,在这个作用域内我们定义自己的成员。当存在继承关系时,派生类的作用域嵌套在其基类的作用域内。如果一个名字在派生类的作用域内无法解析,则编译器继续在外层的基类作用域中继续寻找该名字的定义。  派生类的作用域位于基类的作用域之内这一事实可能有点出人意料,毕竟在我们的程序文本中派生类和基类的定义是相互分离开来的。不过也恰恰因为类的作用域有这种继承嵌套的关系,所以派...

2019-08-19 20:00:00 170

转载 lambda是函数对象

  当我们编写一个lambda后,编译器将该表达式翻译成一个未命名类的未命名对象。在lambda表达式产生的类中含有一个重载的函数调用运算符。vector<string> svec = {"aaaa", "bbb", "ccccc"};class shorterString{public: bool operator()(cons...

2019-08-17 16:10:00 595

转载 函数调用运算符

如果类重载了函数调用运算符,则我们可以像使用函数一样使用该类的对象。因为这样的类同时也能储存状态,所以与普通的函数相比它们更加灵活。class absInt{public: int operator()(int val) const { return (val < 0)?-val : val; }};int...

2019-08-17 15:26:00 241

转载 对象移动

  如我们所看到的,我们的StrVec类是这种不必要拷贝的一个很好的例子。在重新分配内存的过程中,从旧内存将元素拷贝到新内存是不必要的,更好的方式是移动元素。使用移动而不是拷贝的另一个原因源于IO类或unique_ptr这样的类。这些类都包含不能被共享的资源(如指针或IO缓冲)。因此,这些类型的对象不能拷贝但可以移动。右值引用  为了支持移动操作,新标准引用了一种新的引用类型--...

2019-08-14 11:18:00 283

转载 拷贝控制和资源管理

类的行为像一个值,意味着它应该也有自己的状态。当我们拷贝一个像值的对象时,副本和元对象是相互独立的。改变副本不会对原对象有任何影响,反之亦然。行为像指针的类则共享状态。当我们拷贝一个这样的对象时,副本和原对象使用相同的底层数据。改变副本也会改变原对象,反之亦然。行为像值的类  为了提供类值的行为,对于类管理的资源,每个对象都应该拥有一份自己的拷贝。这意味着对于ps指向的str...

2019-08-13 20:09:00 118

转载 拷贝控制操作(copy control)

当定义一个类时,我们显示地活着隐式地此类型的对象拷贝、移动、赋值和销毁时做什么。一个类通过五种特殊的成员函数来控制这些操作,包括拷贝构造函数 copy constructor拷贝赋值运算符 copy-assignment operator移动构造函数 move constructor移动赋值运算符 move-assignment operator析构函数 dest...

2019-08-12 14:19:00 1080

空空如也

空空如也

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

TA关注的人

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