
c++程序设计
文章平均质量分 83
c++原理剖析、实战技巧、c++17、20新特性
chls
这个作者很懒,什么都没留下…
展开
-
C++实现通用的文件(万能)加密方案——包含源码
最近做了一个项目,里面有一个小需求就是对处理过的文件进行加密,加密之后无法打开。我最先想到的是异或加密,因为需要速度,并且对加密的安全性要求不高。1、异或加密原理异或密码(simple XOR cipher)是密码学中一种简单的加密算法,是指对信息进行异或操作来达到加密和解密目的。按这种逻辑,文本串行的每个字符可以通过与给定的密钥进行按位异或运算来加密。如果要解密,只需要将加密后的结果与密钥再次进行按位异或运算即可。说的通俗一点,就是一个字符异或一个密钥字符进行加...原创 2022-05-29 12:09:11 · 13939 阅读 · 6 评论 -
软件开发之数据结构和算法
1、计算机是怎么解决问题的要了解数据结构和算法的重要性,首先要搞明白咱们软件开发在计算机里面的是怎么运用的。那我们看看计算机解决问题的步骤:这个过程中,能够产生的优秀工程师、数学家、程序员。如果你不会数学建模,不会算法,你就成不了一个优秀的程序员。可以说数据结构是待处理问题的数学模型,算法则是处理问题的策略。作为一个优秀的程序员除了要对现实问题有很好的理解与把控外,还要深谙数据结构与算法才能找到合适的数学模型与算法,从而才...原创 2022-05-16 13:55:55 · 2576 阅读 · 0 评论 -
C++ 函数指针
C C语⾔中没有类的概念,只有普通的函数。通过函数名就可以得 到函数地址 #include <stdio.h>#include <stdlib.h>void fun() {}int main() { printf("%p\n", &fun);}对于 fun 和 &fun 应该这样理解: fun 是函数的⾸地址,它的类型是 void () &fun 表示⼀个指向函数 fun 这个对象的地址, 它的类型是 void (*)(原创 2022-01-17 11:15:19 · 435 阅读 · 0 评论 -
OpenGL常用API手册
(一)OpenGL函数库格式:<库前缀><根命令><可选的参数个数><可选的参数类型> 库前缀有 gl、glu、aux、glut、wgl、glx、agl 等等。1、核心函数库主要可以分为以下几类函数(1)绘制基本的几何图元函数。如:glBegain().(2)矩阵操作、几何变换和投影变换的函数。如:矩阵入栈glPushMatrix(),还有矩阵的出栈、转载、相乘,此外还有几何变换函数glTranslate*(),投影变换函数glOr..原创 2022-01-11 18:21:14 · 3934 阅读 · 0 评论 -
深入GPU硬件架构及运行机制
一、导言对于大多数图形渲染开发者,GPU是既熟悉又陌生的部件,熟悉的是每天都需要跟它打交道,陌生的是GPU就如一个黑盒,不知道其内部硬件架构,更无从谈及其运行机制。本文以NVIDIA作为主线,将试图全面且深入地剖析GPU的硬件架构及运行机制,主要涉及PC桌面级的GPU,不会覆盖移动端、专业计算、图形工作站级别的GPU。若要通读本文,要求读者有一定图形学的基础,了解GPU渲染管线,最好写过HLSL、GLSL等shader代码。1.1 为何要了解GPU?了解GPU硬件架构和理解运行机制,笔者原创 2022-01-11 18:07:17 · 2194 阅读 · 2 评论 -
类对象初始化和Initializer_list的
在C++11之前,对于一个值或者一个对象的初始化有很多种方法,我们会用到()、{ }、= 来进行初始化的工作,例如:int a = 0;int array[5] = {1,2,3,4,5};vector<int> first;//初始化一个空的vectorvector<int> second(5,10);//初始化5个元素的vector对象,并全部赋值为10vector<int> third(second.begin(),second.end());//利用原创 2021-12-17 18:49:23 · 1079 阅读 · 0 评论 -
is_abstract实现及思考
要实现is_abstract,需要思考abstract类的特性:无法实例化,也无法定义类对象数组 借助模板特化进行类型匹配 需要借助元编程(需要在编译时确定结果) 借助SFINAE让模板推导能够正确1、数组类型参数和模板函数的匹配注意,数组与指针的类型是不一样的!#include <iostream>#include <type_traits>using namespace std;template<class T>voi...原创 2021-12-17 15:48:47 · 467 阅读 · 0 评论 -
c++考试参考题
c++考试参考题1、对c++和c语言的兼容性,描述正确的是 (c++兼容c )2、c++中使用流进行输出,其中输出到屏幕的对象是(cin)3、对使用关键字new所开辟的动态内存空间,释放时必须使用(delete)4、class成员声明时没有使用private关键字,则默认是(private)5、如果一个类没有定义任何构造函数,下列描述正确的是()编译期总是会自动生成一个不带参数的构造函数6、一个类可以有几个析构函数(1个)7、int Func(int, int)不可以与下列哪个函数构成原创 2021-12-10 16:45:37 · 6115 阅读 · 0 评论 -
CPU Cache
无论你写什么样的代码都会交给 CPU 来执行,所以,如果你想写出性能比较高的代码,这篇文章中提到的技术还是值得认真学习的。另外,千万别觉得这些东西没用,这些东西非常有用,十多年前就是这些知识在性能调优上帮了我的很多大忙,从而跟很多人拉开了差距……基础知识首先,我们都知道现在的 CPU 多核技术,都会有几级缓存,老的 CPU 会有两级内存(L1 和 L2),新的CPU会有三级内存(L1,L2,L3 ),如下图所示:其中: L1 缓存分成两种,一种是指令缓存,一种是数据缓存。L2 缓.转载 2021-11-30 10:20:18 · 624 阅读 · 0 评论 -
vscode连接远程服务器(傻瓜式教学)
如何在远程服务器上进行编码呢?vscode!!!当然,还有很多其他选择,例如sublime、ultraedit等等,这里我们用非常流行的vscode来连接ubuntu服务器做讲解!1、下载vscode百度搜索vscode(注意不是visual studio),进入vscode官网进行下载。2、安装ssh插件根据你的操作系统选择对应的版本进行下载和安装。安装完成之后,启动vscode,选择左侧Extensions 选项卡,在输入框搜索 re...原创 2021-09-30 17:14:59 · 262825 阅读 · 63 评论 -
C++内存模型2——类对象
本篇主要给大家分享类对象在内存中是如何进行内存分配的。咱们都知道类包含属性和方法,那么,类属性和方法在内存中是如何进行分配的呢? 以下代码声明了一个Base类,类中有成员方法、成员属性、静态方法、静态属性,那么,根据这个类的定义创建一个类对象,所占的内存空间为多少呢?#include <iostream>using namespace std;class Base{public: void f(){};//成员方法 void g(...原创 2021-09-23 14:32:43 · 223 阅读 · 0 评论 -
c++内存模型1——基础篇
一、C++程序内存分为5个区:堆、栈、静态全局区、常量区、代码区堆区(heap):用于动态内存分配。堆在内存中位于bss区和栈区之间。一般由程序员分配和释放,若程序员不释放,程序结束时有可能由OS 回收。 栈区(stack):由编译器自动分配释放,存放函数的参数值、局部变量的值等。其操作方式类似于数据结构中的栈。每当一个函数被调用,该函数返回地址和一些关于调用的信息,比如某些寄存器的内容,被存储到栈区。然后这个被调用的函数再为它的自动变量和临时变量在栈区上分配空间,这就是C实现函数递归调用的方法原创 2021-09-20 11:55:27 · 223 阅读 · 0 评论 -
C++面试——程序篇
1.求下面函数的返回值intfunc(x){ intcountx=0; while(x) { countx++; x=x&(x-1); } returncountx;}假定x=9999。答案:8思路:将x转化为2进制,看含有的1的个数。2:复杂声明以下代码分别表示什么意思?void * ( * (*fp1)(int))[10];float (*(* fp2)(int,int,int))(int);i...原创 2021-09-11 17:58:49 · 466 阅读 · 0 评论 -
C++面试——进阶篇
1、什么情况下会调用拷贝构造函数用类的一个对象去初始化另一个对象的时候: new Object{obj} 对一个类对象初始时进行赋值操作:Object newObj = obj; 当函数的参数是类的对象时,就是值传递的时候 :void func(Object obj) 当函数的返回值是类的对象或者引用的时候 : Object getObject()注意:编译开了RVO(返回值优化)时,3 和 4 可能并不会发生!2、 左值和右值的区分最简单的判断方...原创 2021-09-11 17:58:20 · 534 阅读 · 0 评论 -
C++面试——基础篇
1、C和C++的区别 1)编程范式(c:面向过程 c++: 面向对象) 2)动态内存分配(c: malloc/free c++:new/delete) 3)c++支持函数重载 4)c++支持模板 5)c++除了指针还支持引用(引用的本质是常指针) 可以回答的内容很多,以上作为参考,还有其他不同地方可继续总结!2、C++文件编译与执行的四个阶段1)预处理:根据文件中的预处...原创 2021-09-10 21:29:54 · 1003 阅读 · 0 评论 -
typeid 和虚函数
上一篇C++类型预断——RTTI_master-计算机科学专栏-优快云博客讲到了typeid的动态类型推断需要借助虚函数表,本篇专门来讲一下这个原理,让大家理解的更透彻! 前面咱们讲到 typeid 的操作返回值是 type_info 对象的引用,然后输出返回值的地址是相同的,测试代码如下:#include <iostream>#include <functional>using namespace std;class Base{...原创 2021-09-07 23:12:59 · 660 阅读 · 1 评论 -
C++类型预断——RTTI
C++没有类似 Java 语言的 instanceof 的类型预断,有什么方法可以做到类似 java 的类型预断功能呢?和Java相比,C++要想获得运行时类型信息,只能通过 RTTI (Run Time Type Identification)机制,并且C++最终生成的代码是直接与机器相关的(也就是不同编译器实现RTTI的方式不一样,C++标准只是做了约定)。 RTTI 提供了两个操作符:typeid 和 dynamic_casttypeid:返回指...原创 2021-09-07 19:36:26 · 542 阅读 · 1 评论 -
深入理解new[]和delete[]
c++的动态内存管理方式和c语言不一样,在c++中使用new和delete来替换c语言中的malloc和free。这里有几个点不一样, 1、new和delete是操作符,malloc和free是函数(我的理解是c++将new和delete约定为操作符而已,new和delete操作符重载函数本质上还是函数) 2、c++有了类的概念,类对象的初始化除了要分配内存,还需要对内存进行初始化!所以,c++必须引入一种新的内存分配方式,既可以像malloc一样开...原创 2021-09-06 19:01:55 · 4182 阅读 · 5 评论