
C++
赵同学
欢迎浏览文章,共同交流
展开
-
nlohmann/json——NLOHMANN_JSON_SERIALIZE_ENUM
nlohmann/json NLOHMANN_JSON_SERIALIZE_ENUM分析原创 2023-09-20 09:41:37 · 591 阅读 · 0 评论 -
C++ 局部变量未初始化引发的程序概率性异常
你可能认为上面这段代码永远不会返回true,但实际上是有概率会返回true的,因为程序中没有对局部变量a进行初始化,在执行到if (a == 1)条件判断时,a的值是未定义的,是可能为1的,也就是说函数func有时返回true,有时返回false,是不可预期的。具体来说:如果是内置类型变量未被显示初始化,它的值由变量定义的位置决定。原创 2023-08-15 22:42:05 · 465 阅读 · 0 评论 -
C++ Windows删除非空目录
C++ Windows删除非空目录原创 2023-03-09 10:07:34 · 631 阅读 · 0 评论 -
保存软件编译时间
保存软件编译时间原创 2022-08-30 22:49:33 · 379 阅读 · 0 评论 -
C++单例模式
template<typename T>class Singleton{public: static T& instance(); Singleton(const Singleton&) = delete; Singleton& operator= (const Singleton) = delete;protected: struct Token {}; // 代理类,定义为protected,可以保证子类的构造函数是public...原创 2022-01-11 21:33:34 · 263 阅读 · 0 评论 -
Boost常用组件概览
在程序开发中,千万要“避免重复造轮子”(这样下来只会浪费时间,也就是吃力不讨好),所以,如果在开发中遇到了什么问题,首先查阅STL、Boost库,如果不能解决,再上网查,实在没有可以参考的已有方案再自己动手。原创 2017-07-19 20:16:42 · 5366 阅读 · 1 评论 -
unordered_multimap的insert问题
无序关联容器在存储上组织为一组桶,每个桶保存零个或多个元素。无序容器使用一个哈希函数将元素映射到桶。如果容器运行重复关键字,则所有具有相同关键字的元素都保存在相同的桶中原创 2017-07-19 14:37:14 · 2995 阅读 · 0 评论 -
C++动态类型与静态类型
大多数情况下对象的静态类型和动态类型相同,我们不用关系二者区别;只有多态情况下,即在有虚函数的继承体系中,通过基类的指针或引用调用虚函数时,这时我们就需要关系指针或引用对象的动态类型,因为它们的静态类型毋庸置疑是基类,但动态类型有可能是子类(其实也不是有可能,要想应用多态,其动态类型必须是子类),所以动态类型就是跟虚函数、多态、动态绑定息息相关的。原创 2017-07-21 15:00:45 · 9527 阅读 · 7 评论 -
C++继承与Class 内存模型
C++类主要包括属性和操作两类,在对象模型中即一个对象实例中占用内存的只是Class的属性部分,也就是数据成员部分,本文旨在剖析C++对象模型中在有继承情形下类对象的内存布局,主要分4种情况讨论:单一继承没有多态、单一继承有多态、多重继承、虚拟继承。原创 2017-07-12 16:01:47 · 1254 阅读 · 0 评论 -
vector内存增长方式
vector可以理解为动态数组,既然是数组,那么它在内存中就应该是一块连续的内存,但vector是如何支持动态增长的呢?原创 2017-04-25 13:53:19 · 12958 阅读 · 5 评论 -
对C++IO库的一点理解
总之,对于三种IO流对象,都需要把流当做一个中间缓存,即作为变量与文件、标准输入输出外设、内存string之间的,要体会这三者之间的数据流向,比如cin对象,其数据流向为从键盘到cin(中间缓存)再到变量,对于ofstream对象,数据流向为变量到中间缓存再到文件,对于istringstream对象,其数据流向为string字符串常量到中间缓存再到string变量。原创 2017-05-08 16:03:58 · 792 阅读 · 0 评论 -
深入理解C++对象模型之构造函数
学习C++的同学一般都知道有构造函数这个东西,我相信很多同学的理解就是构造函数是用来初始化类成员的,是的,构造函数的本质确实是这样的,但很多同学会有以下两个误解:(1)任何class如果没有定义任何构造函数,编译器就会帮你自动生成一个;(2)编译器用合成出来的默认构造函数会“Class内的每一个data member”;先不说这两个观点对不对,但至少他不严谨。原创 2017-04-24 11:21:00 · 1250 阅读 · 0 评论 -
C++函数中const引用形参的一点理解
const关键字的作用很多,这里只解释它作为函数形参的一个作用,主要有两个作用:(1)它告诉编译器,这个参数是一个常量,首先你在函数内部不能改变它;(2)其次,如果在函数内部需要多次引用这个值,CPU不必每次都重新读取,直接使用第一次读取的值(我想应该是存放在寄存器文件中的)。原创 2017-05-08 17:18:24 · 4473 阅读 · 3 评论 -
C++访问控制符详解
(1)一个类的所有成员函数都可以访问他的所有成员(函数或变量),想一想,C++的封装原则是不让别人看见他的私有成员,是的,别人不能访问,但是它自己在设计的时候总要访问吧,那不然还有谁能访问呢?(2)类的用户只能访问到类的public成员(函数和变量),protected和private的都不能直接访问。(3)对派生类的基类部分中的private成员而言,即使是public继承,派生类的成员函数也不能访问基类部分的private成员。原创 2017-04-26 14:10:30 · 6592 阅读 · 4 评论 -
C++异常处理机制
要理解C++异常处理机制,首先要理解异常处理的基本流程,即异常从哪里抛出(throw),抛出异常之后程序怎么执行(跳转到对应catch语句块),异常处理完成之后程序又怎么执行(再跳转到最后一个catch之后的代码);其次,对于C++面向对象的思想(有很多大牛都批评是只是伪面向对象),即一切都是类,一切都是对象,那当然异常也是一个类型,也可以声明和定义一个异常对象,并调用其相应的成员函数和访问数据成员。原创 2017-05-20 21:23:28 · 710 阅读 · 0 评论 -
深入理解C++对象模型之Data Member存取成本
对于C++语言而言,不好理解的地方大多数由继承和多态这两个东西产生,比如说一个C++类型的内存布局,会因为其是继承而来的派生类或者独立类而不同,如果是派生类,由于继承的存在,它需要包含基类部分,因此其内存布局(模型)需要改变。同时,这里介绍的对一个Class的member的存取成本也与继承和多态有关?原创 2017-04-30 16:51:57 · 741 阅读 · 0 评论 -
深入理解C++对象模型之拷贝构造函数
如果一个Class没有声明一个copy constructor,编译器就会隐式声明一个copy constructor,只有编译器需要的时候,编译器才会定义一个copy constructor实例,并合成于程序之中,而编译器需要的时候是指Class不展现出bitwise copy semantics(位逐次拷贝)。即“如果一个Class未定义出copy constructor,编译器就会自动为它产生出一个”这句话是不对的,只有当Class不展现出bitwise copy semantics时编译器才会产生一原创 2017-04-24 16:57:14 · 1017 阅读 · 1 评论 -
C++中static_cast和dynamic_cast强制类型转换
前言说起C++中的继承、多态、虚函数等概念,可能很多同学都有所了解,但是要说真正熟知的同学可能就不是很多了。最近在编程过程中了解到C++类型的层次转换(这就涉及到了多态和继承的相关概率),通常C语言中可以对内置类型进行强制转换,但是这样做不是很安全,在C++标准中,提供了关于类型层次转换中的两个关键字static_cast和dynamic_cast。原创 2017-03-15 11:45:10 · 53379 阅读 · 17 评论 -
C++模板
前言泛型编程C模板模板实例化前言最近在C++知识查漏补缺和巩固的过程中,遇到关于C++模板的问题,查看了C++ Primer这本书,对相关知识进行总结。(第一次尝试MarkDown编写,不知道效果怎么样)泛型编程泛型编程最初提出时的动机很简单直接:发明一种语言机制,能够帮助实现一个通用的标准容器库。所谓通用的标准容器库,就是要能够做到,比如用一个List类存放所有可能类型的对象这样的事。比如我原创 2017-02-26 15:40:53 · 663 阅读 · 0 评论