
c++
文章平均质量分 83
欧阳海宾
这个作者很懒,什么都没留下…
展开
-
typedef typename 作用
转载自:https://blog.youkuaiyun.com/zhangxiao93/article/details/50569924C++ typedef typename 作用C++的一些语法让人看着费解,其中就有:typedef typename std::vector<T>::size_type size_type;详见《C++ Primer》(第五版)P584 有些不懂的语法有时候虽然...转载 2018-04-08 15:54:36 · 184 阅读 · 0 评论 -
从内存布局看C++虚继承的实现原理
转载自:http://blog.youkuaiyun.com/xiejingfa/article/details/48028491准备工作1、VS2012使用命令行选项查看对象的内存布局微软的Visual Studio提供给用户显示C++对象在内存中的布局的选项:/d1reportSingleClassLayout。使用方法很简单,直接在[工具(T)]选项下找到“Visual Studio命令提示(C)”后点...转载 2018-04-02 19:27:22 · 205 阅读 · 0 评论 -
C++中虚继承的作用及底层实现原理
虚继承和虚函数是完全无相关的两个概念。虚继承是解决C++多重继承问题的一种手段,从不同途径继承来的同一基类,会在子类中存在多份拷贝。这将存在两个问题:其一,浪费存储空间;第二,存在二义性问题,通常可以将派生类对象的地址赋值给基类对象,实现的具体方式是,将基类指针指向继承类(继承类有基类的拷贝)中的基类对象的地址,但是多重继承可能存在一个基类的多份拷贝,这就出现了二义性。虚继承可以解决多种继承前面提...转载 2018-04-02 19:31:45 · 278 阅读 · 0 评论 -
C++友元
我们在学习类的时候,只有类的成员函数可以访问类的非公有数据成员。而C++,提供了友元机制,允许一个类将其非公有成员的访问权授予指定的函数或类。友元的声明只能出现在类定义的内部的任何地方,一般我们将友元的声明放在类定义的开始或者结尾。由于友元不是授予友元关系的那个类的成员,所以它们不受访问控制的影响。友元可以是普通的函数,或者其它已定义的类的成员函数,又或是整个类。将一个函数设为友元,该函数被称...转载 2018-04-03 09:26:42 · 647 阅读 · 0 评论 -
dynamic_cast
dynamic_cast运算符的主要用途:将基类的指针或引用安全地转换成派生类的指针或引用,并用派生类的指针或引用调用非虚函数。如果是基类指针或引用调用的是派生类虚函数无需转换就能在运行时调用派生类的虚函数。前提条件:当我们将dynamic_cast用于某种类型的指针或引用时,只有该类型含有虚函数时,才能进行这种转换。否则,编译器会报错!dynamic_cast运算符的调用形式如下所示:dynam...转载 2018-04-07 10:11:15 · 2012 阅读 · 0 评论 -
std::map排序的原理(这篇文章告诉我们多看看vs源码)
今天被同事问到一个问题,map中第三个参数的意思是什么,于是写了下面这个程序测试了一下。[cpp] view plain copy print?#include <map> #include <iostream> using namespace std; typedef map<int,char> icMap; typedef map<int,...转载 2018-04-23 18:49:52 · 1373 阅读 · 0 评论 -
模板参数自动推导
转载自https://www.cnblogs.com/zwvista/p/7748363.html目录模板参数自动推导示例自定义类模板中的应用Automatic deduction guides(自动推断向导)模板参数自动推导在C++17之前,类模板构造器的模板参数是不能像函数模板的模板参数那样被自动推导的,比如我们无法写1std::pair a{1, "a"s}; // C++17而只能写1st...转载 2018-04-20 10:13:35 · 934 阅读 · 0 评论 -
C++ 模板专门化
1.模板特化的定义C++中的模板特化不同于模板的实例化,模板参数在某种特定类型下的具体实现称为模板的特化。模板特化有时也称之为模板的具体化,分别有函数模板特化和类模板特化。1.1函数模板特化函数模板特化是在一个统一的函数模板不能在所有类型实例下正常工作时,需要定义类型参数在实例化为特定类型时函数模板的特定实现版本。查看如下例:123456789101112131415161718#include ...转载 2018-04-20 10:27:14 · 1498 阅读 · 0 评论 -
c++数组:内置数组,可变大小数组vector,固定大小数组array,固定大小数值优化数组valarray
创建数组,是程序设计中必不可少的一环。我们一般可以有以下几种方法来创建数组。一、C++内置数组数组大小固定,速度较快通用格式是:数据类型 数组名[ 数组大小 ];如 int a[40];//一维数组 int a[5][10];//二维数组二、vector创建数组包含多种通用算法长度可变,使用灵活,但效率稍低vector是使用 new 和 delete 来管理内存的[cpp] view pla...转载 2018-04-24 15:53:22 · 2982 阅读 · 0 评论 -
dynamic_cast转换类指针时,基类需要虚函数
虚函数对于dynamic_cast转换的作用 为何使用dynamic_cast转换类指针时,需要虚函数呢。Dynamic_cast转换是在运行时进行转换,运行时转换就需要知道类对象的信息(继承关系等)。如何在运行时获取到这个信息——虚函数表。 C++对象模型中,对象实例最前面的就是虚函数表指针,通过这个指针可以获取到该类对象的所有虚函数,包括父类的。因为派生类会继承基类的虚函数表,所以通过这个...原创 2018-04-20 19:41:46 · 3043 阅读 · 1 评论 -
slice_array
2.数组子集类—slice类和类模板slice_arrayslice是切割的意思,即将一个向量作为任意维度的数组来处理。“切割”操作是在一个valarray中,中间距离为n的多个元素。slice的跨步是切割两个元素的距离(间隔的下标个数)1.slice类std::slice 是选择器类,一个 std::slice 类型的对象保有三个值:起始下标,跨度,及子集中的值的总数。std::slice 类型...转载 2018-04-25 13:32:58 · 399 阅读 · 0 评论 -
indirect_array类
选择任意下标的数组数据进行运算间接数组子集也是创建数组子集的一种方式,还可以任意排列元素。 这是第四种方法。 1. indirect_array是将valarray<size_t>用作valarray数组下标产生的子集。 2. 下标要小于valarray元素的个数例子://-----------------省略----------------valarray<int> ...转载 2018-04-25 15:02:29 · 499 阅读 · 0 评论 -
类mask_array
valarray类提供了一种描述子集的方式: 屏蔽子集。valarray类经过“屏蔽”处理后,返回结果为valarray<bool>型将“屏蔽”作为下标,值为true的位表明了对应的valarray数组中的元素将作为结果的一部分。和slice_array一样,mask_array不能有程序开发者构造和复制。屏蔽的valarray的元素的个数不能多于valarray的元素个数。【mask...转载 2018-04-25 15:03:51 · 371 阅读 · 0 评论 -
类gslice和类模板gslice_array
gslice: 是general slice的简称。。3个属性:和slice类似,起始索引,元素数量,元素间距。但是他的元素数量和元素间距也是数组。元素个数与维度相同。gslice可以处理一维数组,二维数组,和三维数组gslice_array 为gslice切割的子集的类型gslice类 构造函数:gslice();gslice( std::size_t start, const std::...转载 2018-04-25 15:15:21 · 1024 阅读 · 0 评论 -
wcout输出中文——统计字符串中字符数目
#include "stdafx.h"#include <iostream> // std::cout#include <algorithm> // std::partial_sort#include <string>#include <map>#include <utility> //std::pairst...原创 2018-05-10 10:39:17 · 524 阅读 · 0 评论 -
hash_map介绍与使用
0 概述虽然hash_map和map都是STL的一部分,但是目前的C++标准(C++11)中只有map而没有hash_map,可以说STL只是部分包含于目前的C++标准中。主流的GNU C++和MSVC++出于编译器扩展的目的实现了hash_map,SGI有hash_map的实现,Boost也有类似于hash_map的unordered_map实现,google有dense hash_map和...转载 2018-05-06 10:37:24 · 608 阅读 · 0 评论 -
C++ class中的静态(static)成员
转载自https://blog.youkuaiyun.com/xuleicsu/article/details/1557097(1) 静态数据成员 ①一般地静态数据成员在该类定义之外被初始化,如同一个成员函数被定义在类定义之外一样。在这种定义中的静态成员的名字必须被其类名限定修饰,例如下面是_interestRate的初始化// 静态类成员的显式初始化#include "account.h"d...转载 2018-03-25 13:50:13 · 1858 阅读 · 0 评论 -
static
关键字static的意思是静态,有3个明显作用:1)在函数体内,静态变量具有"记忆"功能。即在函数被调用过程中,一个被声明为静态变量的值维持不变。 static局部变量和普通局部变量的区别:static局部变量只被初始化一次,下一次的运算依据上一次的结果值。2)在模块内,但在函数体外,它的作用域范围是有限制的。static类型的变量,是本地的全局变量。所以,可以被模块内的所有函数访问,不可以...转载 2017-10-06 12:28:41 · 641 阅读 · 0 评论 -
static_cast, dynamic_cast, reinterpret_cast, const_cast区别比较
转载自:http://www.cnblogs.com/jerry19880126/archive/2012/08/14/2638192.html隐式转换(implicit conversion)short a=2000;int b;b=a;short是两字节,int是四字节,由short型转成int型是宽化转换(bit位数增多),编译器没有warning,如下图所示。宽化转换(如char到in...转载 2018-04-07 21:50:45 · 132 阅读 · 0 评论 -
C++复习第一天 C++基本概念
目 录1 开始学习C++ 41.1 C++的头文件 41.2 命名空间 41.3 更严格的类型转化 41.4 new和delete 41.5 内联函数 41.6 引用 51.7 函数的重载 5原创 2017-09-16 13:24:43 · 247 阅读 · 0 评论 -
C++复习第二天 友元
友元(走后门!) C++中控制类对象私有部分的访问,但有时候需要在类的外部访问类的私有成员,这种情况下C++提供了友元机制。#include //原文地址:http://blog.youkuaiyun.com/oyhb_1992using namespace std;class demo0; //前置声明class demo{private: int i;//只能在类的内部原创 2017-09-17 15:07:39 · 217 阅读 · 0 评论 -
C++复习第一天 静态类成员实现单例模式
/*********************************mystring.h*******************************/#ifndef MYSTRING_H#define MYSTRING_H#include //一个单例的能够动态分配内存的字符串class mystring{private: static mystring *self;原创 2017-09-18 08:32:21 · 420 阅读 · 0 评论 -
C++复习第三天 运算符重载
#include #include #include using namespace std;class mystring{public: //private char *s;public: mystring() { s = new char[1024]; cout << "mystring" << endl; }原创 2017-09-18 14:11:21 · 404 阅读 · 0 评论 -
C++复习第四天 命名空间
/********************命名空间的嵌套**************************/#include namespace space1{ int a(10); char *str("gogogo"); namespace space2 //命名空间的嵌套 { int a(9); }}namespace原创 2017-09-19 16:47:06 · 289 阅读 · 0 评论 -
C++复习第四天 函数重载
/*************************函数重载*********************/#include#include//参数的个数,参数的类型不同,顺序不同,返回值无关//extern "C"{} //按照c标准编译而不是按照C++标准编译void go(int a){ std::cout << a;}void go(double a){ std::c原创 2017-09-19 18:23:59 · 304 阅读 · 0 评论 -
C++——左值引用和右值引用
这篇blog主要介绍一下左值和右值的概念及应用陷阱1、左值和右值的概念 左值是可以放在赋值号左边可以被赋值的值;左值必须要在内存中有实体; 右值当在赋值号右边取出值赋给其他变量的值;右值可以在内存也可以在CPU寄存器。 一个对象被用作右值时,使用的是它的内容(值),被当作左值时,使用的是它的地址。2、引用转载 2017-09-20 16:50:41 · 197 阅读 · 0 评论 -
volatile
学习C关键词的时候,我们看到了一个新面孔——volatile。在程序员面试宝典中提到“关键字volatile的面试例题是考查嵌入式编程”,中间有一段解析:回答不出这个问题的人是不会被雇佣的。我认为这是区分C程序员和嵌入式系统程序员的最基本的问题。搞嵌入式的家伙们经常同硬件、中断、RTOS等等打交道,所有这些都要求用到volatile变量。不懂得volatile的内容将会带来灾难转载 2017-10-06 22:34:10 · 313 阅读 · 0 评论 -
C++复习第四天 引用不简单(本质是指针)
/*************************数组引用*************************/#include#include#define Main(n) main##n()// int a[10]// int (&ra)[10]// int a[2][5]// int (&ra)[2][5]int main1(){ int a[10] =原创 2017-09-20 23:25:38 · 295 阅读 · 0 评论 -
C++复习第四天 auto关键字
#include#include/*auto关键字常用于两种情况:1:自动变量,自动获取类型,输出,泛型2:自动变量,可以实现自动循环一维数组自动循环的时候,对应的必须是常量,所以二维数组循环是内部循环就要注意auto关键字是在C++11中引入,所以有些编译器不支持*/void main1(){ auto num = 10.9;//自动变量,自动匹配类型 auto num原创 2017-09-19 13:59:02 · 344 阅读 · 0 评论 -
推荐一本好书:C++反汇编与逆向分析技术揭秘
从汇编底层代码看C++的继承和多态的原理,非常好的一本书!原创 2017-11-23 15:13:11 · 2475 阅读 · 0 评论 -
extern “C”的作用详解
extern “C”的作用详解 转载自https://www.cnblogs.com/carsonzhu/p/5272271.html extern "C"的主要作用就是为了能够正确实现C++代码调用其他C语言代码。加上extern "C"后,会指示编译器这部分代码按C语言的进行编译,而不是C++的。由于C++支持函数重载,因此编译器编译函数的过程中会将函数的参数类型也加到编译后的代码中,...转载 2018-03-24 19:45:32 · 304 阅读 · 0 评论 -
虚表、多态
转载自:http://www.cnblogs.com/malecrab/p/5572730.html1. 概述简单地说,每一个含有虚函数(无论是其本身的,还是继承而来的)的类都至少有一个与之对应的虚函数表,其中存放着该类所有的虚函数对应的函数指针。例:其中:B的虚函数表中存放着B::foo和B::bar两个函数指针。D的虚函数表中存放的既有继承自B的虚函数B::foo,又有重写(override)...转载 2018-04-07 15:30:53 · 159 阅读 · 0 评论 -
从类内存看虚表
结合https://blog.youkuaiyun.com/oyhb_1992/article/details/79841978文章看情形一:单继承,派生类中只有一个虚表#include "stdafx.h"using namespace std;#include <iostream>// 基类Aclass A{public: int dataA; virtual void fo...原创 2018-04-07 16:03:53 · 238 阅读 · 0 评论 -
哈希表的简单实现例子
Hash// Hash.cpp : Defines the entry point for the console application.//#include "stdafx.h"#include <iostream>using namespace std;enum {COUNT=17};typedef int DATA ;struct SNode{ DATA d...原创 2018-05-06 10:45:46 · 5689 阅读 · 0 评论