![](https://img-blog.csdnimg.cn/20201014180756923.png?x-oss-process=image/resize,m_fixed,h_64,w_64)
C\C++
文章平均质量分 88
YoungYangD
喜欢读书、旅行的小男生,梦想是贩卖二手阳光。
展开
-
C++ Mutable
1、mutable 含义及常规使用mutable 英文中表示,易变的,不定的;性情不定的,而在代码中表示 可变数据成员。由前面整理的 const详解 知道,由const修饰的成员函数中,不能对成员变量进行修改,因为隐藏的形参是 const 属性的。而实际开发过程中,我们可能需要对某些成员变量进行修改,就需要用到 mutable。class constA{public: constA(int a):m_a(a){} void funcA() const { cout << ++m_原创 2021-08-04 20:34:56 · 7081 阅读 · 0 评论 -
C++ 类中成员函数分析
概述之前对成员变量的分布进行了整理,今天就对成员函数进行整理。1、非静态成员函数C++的设计准则之一就是:非静态成员函数至少和一般的非成员函数的执行效率相同。为了实现上衣准则,编译器会对非静态成员函数进行改进,先看下面的例子:float func(const Point3d* _this) { .... }float Point3d::func() const { .... }编...原创 2018-12-30 12:55:13 · 374 阅读 · 0 评论 -
C++ 强制类型转换
概述C++ 兼容 C,对于C语言的类型转换也是支持的。但是C风格的类型转换有很多缺点,它可以任意类型之间进行转换,查找源类型比较麻烦,而且有的类型之间进行转换是不安全的行为。C++的设计强调类型安全,为了修补这个大坑,C++提供了四种的类型转换:static_cast,const_cast,dynamic_cast,reinterpret_cast。对于C的写码形式为:(type) exp...原创 2018-12-30 23:27:54 · 390 阅读 · 0 评论 -
C++ new 和 delete 的讲解
概述运算符 new 和 delete 看起来很简单,但是它们也有不少的知识点。对于new来说就有 new operator、operator new、placement new 和 new operator[]等。对于 delete 也有 delete operator、poerator delete、delete operator[] 等。下面就进行按个整理。1、new operator平...原创 2019-01-01 19:55:41 · 4829 阅读 · 0 评论 -
C++ 执行期数据处理
1、全局变量对于全局变量,C++保证一定会在程序使用它之前,把变量给构建出来,否则会在程序的使用过程中,出现为初始化的错误。我们知道C++所有的全局变量都会被放置在程序的data segment中。对于内置数据类型来说,要么是进行初始化了,要么没有进行初始化,但C++会自动设定初始值0。如:int v1 = 1024; //data segment中 初始值为 1024int v2; ...原创 2019-01-06 21:32:49 · 282 阅读 · 0 评论 -
C++11 中 default 和 delete 函数
概述之前我整理了两篇编译器合成的默认函数,这里介绍与合成的默认函数之间有些关系的关键字 default 和 delete。1、default 函数我们通过对函数定义为=default,来显式的要求编译器给 default 函数自动生成函数体。例:class myclass{public: myclass() = default; myclass( int a ) { m_...原创 2019-01-03 11:00:16 · 698 阅读 · 0 评论 -
C++ 构造函数和析构函数使用中注意的事项
1、概述之前整理了一些构造和析构函数的内容,还有一些使用上的细节没有整理,今天就对这些进行一些整理。过年之后就没怎么整理知识,是因为最近在准备换工作,忙着写简历、面试和梳理之前学习的知识。以后会减少知识整理的频率,但是还是会坚持整理的。2、不让异常逃离析构函数C++并不禁止析构函数吐出异常,但是它并不鼓励你这样做。这样是有理由的,如下:class Widget{public: ......原创 2019-03-17 18:29:23 · 877 阅读 · 0 评论 -
C++ 重载、重写(覆盖)、隐藏的定义与区别
1、重载(overload)重载的定义为:在同一作用域中,同名函数的形式参数(参数个数、类型或者顺序)不同时,构成函数重载。例如:class A{public: int func(int a); void func(int a, int b); void func(int a, int b, int c); int func(char* pstr, int a);...原创 2019-03-21 20:29:48 · 14336 阅读 · 0 评论 -
C++异常处理机制
1、概述感谢大家,我是假装很努力的YoungYangD(小羊)。参考资料:《More Effective C++》原创 2019-03-30 22:16:39 · 1880 阅读 · 0 评论 -
C++ 异常处理注意问题
1、概述昨天对C++异常处理的机制进行了整理,今天再把异常机制的一些注意事项给整理一下,希望牢记于心,写出正确高效的代码。C++ 增加了异常机制之后,深远而根本的改变了许多事情。比如,原始指针的使用竟成为一种高风险行为,资源泄漏的机会大大增加等。所以如何撰写异常安全的程序,需要我们有很多的学习。2、使用RAII 避免内存的泄漏这个问题就是老生常谈了,前面C++资源管理已经整理过了,在这里就...原创 2019-03-31 11:11:53 · 723 阅读 · 0 评论 -
C++ 多态
1、概述之前感觉对多态了解的挺深入的,任何多态的问题都难不倒我,然后我发现有静态多态的概念,一下子就懵掉了。所以有时候不要太自信,多看看就很容易碰到自己的只是盲区,趁着这个机会,把多态的内容给整理一下。多态:即多种形态,调用同一种方法,不同的类型,会有不同状态的操作。C++ 里面的多态可以分为:静态多态和动态多态。静态多态很容易理解,就是编译时就知道的重载;动态多态是需要在运行期确定的。...原创 2019-03-31 16:11:13 · 266 阅读 · 0 评论 -
C++ 资源管理(RAII)
1、概述所谓资源,就是程序员从操作系统中获取的硬件资源,我们申请了资源,使用完毕之后要还给系统。C++最常使用的是内存资源,其它还包括文件描述符、互斥锁、图形界面中的字型和笔刷、数据库连接、以及网络socket等。尝试在任何运用情况下对资源的正确回收,是件困难的事情,尤其是你考虑到异常、函数内多重回传路径、程序维护员改动软件却没能充分理解随之而来的冲击。高能的程序员就指定了这样一条规则,来进行...原创 2019-03-28 20:57:27 · 740 阅读 · 0 评论 -
C++ template的使用
1、template的使用C++ 的高级玩法,当然包含了模板。模板(template)是实现代码重用机制的一种工具,它可以实现类型参数化,把类型定义为参数(模板元编程),从而实现了真正的代码可重用性。模板是用来批量生成功能和形式都几乎相同的代码的。编译器就能在需要的时候,根据模板自动生成程序的代码。从同一个模板自动生成的代码,形式几乎是一样的。 模板就像一个做饼干的模具,至于饼干是什么味道,则...原创 2019-05-15 19:21:54 · 15362 阅读 · 0 评论 -
C++ 继承关系的作用域 和 注意事项
1、类继承关系的作用域我们都知道在如下的代码中:int x; //全局变量void someFunc(){ double x; //局部变量 std::cin >> x; //读取一个新值赋予 local 变量 x}同名的 x 变量,作用域不同,而根据 C++的名称遮掩规则:内层作用域的名称会遮盖外层作用域的名称。,在赋值语句时,涉及的是局部变量 x。如...原创 2019-05-31 21:11:30 · 669 阅读 · 0 评论 -
C++ 模板与泛型编程
1、概述前面对 STL 和泛型编程进行了整理,但还是有一些细节需要进行整理。1.1、 隐式接口和编译器多态对于 多态 和 模板的实例化与具象化 我在前面的文章中进行过整理,这里就不赘述了,想了解的可以在点击链接回顾一下。这里就说一下总结:class 和 template 都支持接口 和 多态。对 class 而言接口是显示的,以函数签名为中心。多态则是通过 virtual 函数发生...原创 2019-05-29 20:43:57 · 403 阅读 · 0 评论 -
C++ 继承关系及其深层含义
1、概述C++ 中的继承可以是单一继承或者多重继承,每一个继承连接可以是 public,protect 或 private,也可以是 virtual 或 non-virtual。但是这些继承方面的关系是怎么的?选择使用哪一种继承时的标准是什么?我们总是给忽略掉,前面我们整理了一部分 virtual 和 non-virtual 继承注意事项 ,今天在整理另一部分。2、确定 public 继承是 ...原创 2019-06-04 20:38:41 · 948 阅读 · 0 评论 -
C++ 虚函数及多态原理详解
概述虚函数机制作为C++面向对象的重要支撑,但是我们对它知之甚少,因为它由编译器实现。今天就对虚函数进行整理,这样出去吹牛会更有底气。1、虚函数的支持原理每一个拥有虚函数的类会产生出一堆指向virtual functions的指针,放在表格中,这个表格被称为virtual table(虚函数表)。在定义类的对象时,编译器会给这个对象插入一个合成指针,指向相关的virtual table。这...原创 2018-12-23 22:41:23 · 718 阅读 · 0 评论 -
C++ const的详解
概述const 是一个语义约束,编译器会强制实施这个约束,允许程序员告诉编译器哪些值是保持不变的,如果我们的代码试图去修改,编译器会给出错误提示。const可以使用在很多地方,下面是我对const进行的梳理。1、const修饰变量修饰变量时,表示此变量的值是只读的,不能被修改,因为不能被修改所以必须初始化。如:const int abcd = 1234;const int ival; /...原创 2018-12-17 23:40:04 · 1452 阅读 · 0 评论 -
C++编译器合成的默认函数(第二篇)
概述前面我们整理了编译器合成的默认构造函数,也进行了深度的解析,那其他的合成函数是怎样的呢?下面就对其他的合成函数进行逐一整理。1、析构函数当对象被销毁的时候,会自动调用的函数。主要用来销毁类中申请的资源。格式跟构造函数差不多,只是在前面增加一个“~”符号。注意:对于未定义析构函数的类,编译器会默认生成一个非虚析构函数,该析构函数会调用成员以及基类的析构函数。如果在类中申请了动态资源...原创 2018-12-02 18:59:46 · 2155 阅读 · 3 评论 -
关键字和运算符sizeof详解
概述在学习C语言时,老师讲解sizeof时还以为就是一个普通的运算符,只是用来计算所占字节的,现在看来要么我当时在睡觉,要么我灵魂在出窍。在找工作笔试的过程中,总是会碰到关于sizeof用法的各种题目,碰到比较难度比较大的题目时,曾经一度的怀疑人生。现在就把这个运算符的使用归纳一下,以免以后还怀疑人生。概念及语法定义:sizeof运算符返回一条表达式或一个类型名字所占的字节数。返回值是一个s...原创 2018-11-26 01:31:17 · 842 阅读 · 0 评论 -
#pragma的常用方法讲解
概述我们在写代码时,总会遇到头文件多次包含的情况,刚开始时我们使用宏定义进行控制,之后发现有#pragma once这样简单的东西,当时是很兴奋,以为#pragma就这一种用法。唉~,现在想想当时还是年轻啊,不过还是年轻好啊。1、什么是预处理预处理是将源文件的文本作为翻译的第一阶段操作的文本处理步骤。 预处理不会分析源文本,但会为了查找宏调用而将源文本细分为标记。 主要包括了下面三个方面:...原创 2018-11-25 22:04:26 · 58493 阅读 · 10 评论 -
C++中Struct与Class的区别与比较
概述之前只知道在C++中类和结构体的区别只有默认的防控属性(访问控制)不同,struct是public的,而class是private的。但经过上网查资料才发现,除了这个不同之外,还有很多的知识点需要掌握。下面就听我一一道来~1、首先比较一下C中的结构体和C++中的结构体区别C++中的struct是对C中的struct进行了扩充,所以增加了很多功能,主要的区别如下图所示:上面罗列了在声明...原创 2018-11-22 21:23:15 · 42017 阅读 · 27 评论 -
C++编译器合成的默认函数(第一篇)
1、什么是构造函数?构造函数就是一类特殊的成员函数,用来控制对象的初始化过程。无论何时类的对象被创建,就会自动调用构造函数,构造函数不能手动调用。语法:函数名与类名相同,并且没有返回类型的函数。说明:类可以包含多个构造函数,和重载函数差不多。构造函数不能被声明成const的。跟防控属性没有关系,可以是public、protected或者private。class Sale...原创 2018-12-02 00:18:14 · 554 阅读 · 0 评论 -
C++指针详解
概述C/C++语言之所以强大,以及其自由性,很大部分体现在其灵活的指针运用上。因此,说指针是C/C++语言的灵魂一点都不为过。 有好的一面,必然会有坏的一面,指针的灵活导致了它的难以控制,所以C/C++程序员的很多bug是基于指针问题上的。今天就对指针进行详细的整理。1、指针是什么?指针是“指向(point to)”另外一种类型的复合类型。复合类型是指基于其它类型定义的类型。理解指针,先从...原创 2018-12-08 22:55:09 · 98630 阅读 · 24 评论 -
C++ static关键字的使用总结
概述平时写代码时会用到类的静态函数,但是对于static整体认识并不明朗,今天就对static进行整理。1、c中static的用法static在c中的作用主要有两个:限定作用域、保持内容持久化。主要使用的地方有以下几种。1.1、静态全局变量语法:在全局变量前面加上关键字static,全局变量就定义成一个静态全局变量。如:static int globleValue;初始化:未经初始化的...原创 2018-12-12 20:25:37 · 664 阅读 · 0 评论 -
C++ extern关键字的使用总结
概述上次我们整理C++编译器函数名修饰规则时,有提到过extern的一种用法,但是extern还有别的使用,今天就对它进行完整的整理。1、声明外部变量C++程序基本都是分离式编译机制,允许我们将程序分割成若干个文件,每个文件可被独立编译。但是这样需要共享代码时,就有点麻烦。因为各个文件中的全局变量是互相不透明的,可见域限制在文件内部。而extern可以解决这个问题。如果一个文件想使用别处定...原创 2018-12-12 21:37:10 · 3094 阅读 · 0 评论 -
C++数组的详细解析
概述数组在写程序时经常用到,但是对于它和指针的关系,自己经常搞混,所有抽点时间对数组进行整理。1、数组的概念和使用数组是用来存储相同类型的变量的顺序集合。所有的数组都是由连续的内存位置组成。最低的地址对应第一个元素,最高的地址对应最后一个元素。语法:type arrayName [ arraySize ][arraySize1]; arraySize必须是一个大于等于零的整数常量。...原创 2018-12-03 21:42:31 · 36255 阅读 · 5 评论 -
C++ lambda表达式及其原理
概述C++ 11中引入了新的lamdba表达式,使用也很简单,我最喜欢的是不用给函数取名称,每次给函数取名称都感觉自己读书太少~1、lambda表达式lambda表达式可以理解为一个匿名的内联函数。和函数一样,lambda表达式具有一个返回类型、一个参数列表和一个函数体。与函数不一样的是lambda必须使用尾置返回类型。一个lambda表达式表示一个可调用的代码单元。语法:[capture...原创 2018-12-13 23:25:27 · 8069 阅读 · 5 评论 -
C++编译器函数名修饰规则
概述前段时间整理了函数的调用约定,顺便说了C编译器下的函数名修饰规则,其中漏掉了C++中函数名的修饰规则,今天就给补上。1、函数名字修饰的意义函数的名字修饰就是编译器在编译期间创建的一个字符串,用来指明函数的定义或原型。链接程序或其他工具有时需要指定函数的名字修饰来定位函数的正确位置。(链接问题后面再整理)多数情况下程序员并不需要知道函数的名字修饰,链接程序或其他工具会自动区分他们。当然,...原创 2018-12-06 21:14:53 · 2038 阅读 · 0 评论 -
C++ 引用以及引用与指针的区别
概述前面整理了指针的用法,但是经常和指针拿来对比东西是引用。确实指针在使用的过程中会有很多的麻烦,比如赋初值、使用时判空、无效指针、深浅拷贝等等。在我看来引用的指针的高级替代,它的使用规则规避了很多出错的可能。下面就对引用进行整理。需要注意的是C11引入了右值引用,我们这里所说的引用都是在讨论左值引用。1、什么是引用?引用是给对象起了一个别名,它也是一种复合类型。通过将声明符写成&amp;amp;amp;amp;amp;amp;...原创 2018-12-09 21:54:58 · 2654 阅读 · 0 评论 -
C++ inline的详解
1、inline的作用在C++中,为了解决一些频繁调用的小函数大量消耗栈内存问题,特别的引入了inline修饰符,表示为内联函数。栈空间是指防止程序局部数据的内存空间。在系统下,栈空间是有限的,如果频繁大量的使用就会造成因栈空间不足而导致程序出错的问题。在程序编译时,编译器将程序中出现的内联函数调用表达式用内联函数的函数体进行替代,类似于宏展开。如:int min ( int v1, in...原创 2018-12-17 19:59:15 · 4125 阅读 · 0 评论 -
C++ 类中数据成员分布详解
概述我们都知道类中包含着数据成员,但是数据成员在内存中是怎样分布的呢?继承之后数据又是怎样布局的呢?下面对这些问题进行整理。类的空间分布是编译器编译的结果,不同的编译器有可能会不一样,但是原理是一样的。1、空类我们定义了一个空类,然后对空类进行sizeof计算,如下:class myclass{};cout &amp;amp;amp;amp;amp;lt;&amp;amp;amp;amp;amp;lt; sizeof myclass &a原创 2018-12-22 23:39:13 · 5273 阅读 · 0 评论 -
cmdline(命令行)参数解析库
概述有时写的程序需要用户可以定制程序的行为,我们除了提供交互式的操作,还可以使用命令行的方式,这样更有效率,而且可用于编写脚本程序。但是对于命令行的解析,需要根据不同的场景进行不同的解析,这样很是繁琐,所以我上网查找到了cmdline解析器。下面就总结一下cmdline的使用,若以后有空把这个库分析一下给补上。1、cmdline简介cmdline是一个非常好用的C++命令行解析器,使用模板书...原创 2018-12-11 20:52:12 · 11028 阅读 · 7 评论 -
c++中using的用法
1、概述我们用到的库函数基本上都属于命名空间std的,在程序使用的过程中要显示的将这一点标示出来,如std::cout。这个方法比较烦琐,而我们都知道使用using声明则更方便更安全。这个我们程序员肯定都知道了,今天突发奇想就想对using整理一下。2、命令空间的using声明我们在书写模块功能时,为了防止命名冲突会对模块取命名空间,这样子在使用时就需要指定是哪个命名空间,使用using声...原创 2018-11-29 23:05:47 · 34255 阅读 · 9 评论