C++
文章平均质量分 62
C++
阿卡基-马
业余马拉松选手
展开
-
C 语言结构体数组指针以及函数
结构体数组指针指针变量可以指向一个结构体数组,这时指针变量的值是整个数组的首地址。设 ps 为指向结构体数组的指针变量,则 ps 也指向该结构体数组的第 0个元素,ps+1指向第一个元素,ps+i 则指向第 i 元素,这与普通数组的情况是一样的。【示例】用指针变量输出结构体数组。#include <stdio.h>struct stu{ int num; char *name; char sex; floa...转载 2022-05-16 16:56:44 · 1249 阅读 · 0 评论 -
Ubuntu下cppcheck的安装和使用
# DESTDIR 安装到的目的路径# FILESDIR 实际安装路径为`DESTDIR+FILESDIR`,注意这两个路径末尾斜杠都要去掉make -j8 FILESDIR=/usr/share/cppcheck DESTDIR= MATCHCOMPILER=yessudo make install FILESDIR=/usr/share/cppcheck DESTDIR= MATCHCOMPILER=yes...原创 2022-03-22 08:40:22 · 9103 阅读 · 1 评论 -
【c++】指针参数是如何传递内存的
参数策略如果函数的参数是一个指针,不要指望用该指针去动态申请内存。如下:void GetMemory(char *p, int num){ p = (char *)malloc(sizeof(char) * num);}void Test(void){ char *str = NULL; GetMemory(str, 100); //str仍未NULL strcpy(str, "hello"); //运行错误}原因是编译器总是为每转载 2021-04-28 15:37:06 · 192 阅读 · 0 评论 -
C 语言 | 指针 | ptr==((void*)(-1)) | ptr==NULL
在看分布式文件系统代码时,有如下内容:#define passert(ptr) if (ptr==NULL) { \ fprintf(stderr,"%s:%u - out of memory: %s is NULL\n",__FILE__,(unsigned)__LINE__,#ptr); \ syslog(LOG_ERR,"%s:%u - out of memory: %s is NULL",__FILE__,(unsigned)__LINE__,#ptr); \...转载 2021-08-12 09:49:38 · 339 阅读 · 0 评论 -
C中int8_t、int16_t、int32_t、int64_t、uint8_t、size_t、ssize_t区别
工作中经常碰到int8_t、int16_t、int32_t、int64_t、uint8_t、size_t、ssize_t等数据类型,所以有必要对此进行梳理。int_t同类int_t 为一个结构的标注,可以理解为type/typedef的缩写,表示它是通过typedef定义的,而不是一种新的数据类型。因为跨平台,不同的平台会有不同的字长,所以利用预编译和typedef可以最有效的维护代码。int8_t:typedefsignedchar;uint8_t:typed...转载 2021-04-26 14:19:22 · 7268 阅读 · 0 评论 -
C语言实现字节流与十六进制字符串的相互转换
//字节流转换为十六进制字符串void ByteToHexStr(const unsigned char* source, char* dest, int sourceLen){ short i; unsigned char highByte, lowByte; for (i = 0; i < sourceLen; i++) { highByte = source[i] >> 4; lowByte = source[.转载 2020-12-17 20:13:33 · 1389 阅读 · 0 评论 -
C++内存管理之shared_ptr
引子 c++中动态内存的管理是通过new和delete来完成的,只要保证new和delete的配对使用,是没有问题的。但是有时候我们会忘记释放内存,甚至有时候我们根本就不知道什么时候释放内存。特别时在多个线程间共享数据时,更难判断内存该何使释放。这种情况下就机器容易产生引用非法内存的指针。 为了更容原创 2020-11-18 15:32:38 · 683 阅读 · 0 评论 -
UML类图
1.类图基础属性类图的表示-表示private #表示protected ~表示default,也就是包权限 _下划线表示static 斜体表示抽象 2.类与类之间关系在UML类图中,常见的有以下几种关系: 泛化(Generalization), 实现(Realization),关联(Association),聚合(Aggregation),组合(Composition),依赖(Dependency)类与类之间的关系2.1泛化介绍:泛化(Gen.原创 2020-10-09 10:49:22 · 240 阅读 · 0 评论 -
spdlog Features
Very fast (seebenchmarksbelow). Headers only or compiled Feature rich formatting, using the excellentfmtlibrary. Asynchronous mode (optional) Customformatting. Multi/Single threaded loggers. Various log targets: Rotating log files. Daily log ...原创 2020-09-29 16:51:13 · 378 阅读 · 0 评论 -
深入 理解char * ,char ** ,char a[ ] ,char *a[] 的区别
C语言中由于指针的灵活性,导致指针能代替数组使用,或者混合使用,这些导致了许多指针和数组的迷惑,因此,刻意再次深入探究了指针和数组这玩意儿,其他类型的数组比较简单,容易混淆的是字符数组和字符指针这两个。。。下面就开始剖析一下这两位的恩怨情仇。。。 1 数组的本质 数组是多个元素的集合,在内存中分布在地址相连的单元中,所以可以通过其下标访问不同单元的元素。。 2 指针。 指针也是一种变量,只不过它的内存单元中保存的是一个标识其他位置的地址。。由于地址也是整数,在32位平台下,指针默认为转载 2020-08-03 14:05:42 · 861 阅读 · 0 评论 -
void(*func)(int)
void(*func)(int) 是一个指针 指向一个 返回值为void 参数为int的函数是一个函数指针具体理解http://zhidao.baidu.com/link?url=5GpEN7wPUhDlk_m-3drRHV9bGxv53tj818vtd1GIsyaVfyY1mdsFZfP6_2M_DNAfTQrh0qxMo_wXhK1CjIEPJK原创 2020-07-19 12:00:01 · 1477 阅读 · 2 评论 -
C++虚函数表剖析
关键词:虚函数,虚表,虚表指针,动态绑定,多态一、概述为了实现C++的多态,C++使用了一种动态绑定的技术。这个技术的核心是虚函数表(下文简称虚表)。本文介绍虚函数表是如何实现动态绑定的。二、类的虚表每个包含了虚函数的类都包含一个虚表。我们知道,当一个类(A)继承另一个类(B)时,类A会继承类B的函数的调用权。所以如果一个基类包含了虚函数,那么其继承类也可调用这些虚函数,换句话说,...转载 2020-03-08 22:15:14 · 218 阅读 · 0 评论 -
C++系列(纯虚函数和抽象类)
下面通过一个例子来说明纯虚函数的定义方法在这个类当中,我们定义了一个普通的虚函数,并且也定义了一个纯虚函数。那么,纯虚函数是什么呢??从上面的定义可以看到,纯虚函数就是没有函数体,同时在定义的时候,其函数名后面要加上“= 0”。纯虚函数的实现原理本节从虚函数表的角度来说明纯虚函数的实现原理。上面就是我们在前面课程讲到的多态的实现原理,在讲这一部分的时候,讲到了虚函数表以及虚函数表指针...转载 2020-02-26 22:22:34 · 635 阅读 · 0 评论 -
C++ 面试题
首先郑重声明,这些面试题的答案都是参考网上的答案和自己理解的部分整合起来,如有错误,欢迎指针。1 多态的实现存在虚函数的类至少有一个(多继承会有多个)一维的虚函数表叫做虚表(virtual table),属于类成员,虚表的元素值是虚函数的入口地址,在编译时就已经为其在数据端分配了空间。编译器另外还为每个类的对象提供一个虚表指针(vptr),指向虚表入口地址,属于对象成员。在实例化派...原创 2020-02-19 15:16:20 · 822 阅读 · 0 评论 -
Configure VS Code for Microsoft C++
In this tutorial, you configure Visual Studio Code to use the Microsoft C++ compiler and debugger on Windows. After configuring VS Code, you will compile and debug a simple program to get familiar wit...原创 2020-02-16 16:51:55 · 901 阅读 · 0 评论 -
C++中的static关键字的总结
C++的static有两种用法:面向过程程序设计中的static和面向对象程序设计中的static。前者应用于普通变量和函数,不涉及类;后者主要说明static在类中的作用。1.面向过程设计中的static1.1静态全局变量在全局变量前,加上关键字static,该变量就被定义成为一个静态全局变量。我们先举一个静态全局变量的例子,如下://Example 1#include &l...原创 2020-01-01 21:54:31 · 136 阅读 · 0 评论 -
深度解析QMap与QHash
关键词:1. QMap深度解析QMap是一个以升序键顺序存储键值对的数据结构 QMap原型为class QMap<K, T>模板 QMap中的键值对根据Key进行了排序 QMap中的Key类型必须重载operator <程序说明:QMap的使用方法#include <QtCore/QCoreApplication>#include <QM...转载 2019-11-29 17:09:28 · 1663 阅读 · 0 评论 -
C++:在switch的case中定义变量的问题
C++:在switch的case中定义变量的问题问题描述:平常写代码过程中常会遇到在switch-case中定义局部变量(如下面的示例中的“case ECOLOR_RED 代码1中定义的temp变量”),但是编译总是无法通过。之前看到书中提到过这个问题,但是好久没写C++,就忘了具体怎么回事,这次用到总算弄明白了。为了以后万一遗忘了方便查阅,特地记录说明。 switch(color)...转载 2019-11-27 19:04:06 · 1253 阅读 · 1 评论 -
C++ push方法与push_back方法
摘要】push与push_back是STL中常见的方法,都是向数据结构中添加元素。初识STL,对于添加元素的方法以产生混淆,这里暂对两种方法作出比较分析。此外,本文还将简述push对应的stack与queue系列,常见方法的介绍,以及与push_back相对应的vector系列常见方法介绍。详见下文。list 也是使用 push_back .【正文】push_back 方法介绍...转载 2018-11-23 14:38:39 · 13841 阅读 · 0 评论 -
传参时 const string& 相对 const string 有哪些优势?
C++中值传递和引用传递的方式。C++的值传递(pass-by-value),是从调用的地方把值复制一遍传给函数,这样做有两个问题,第一,需要将实参拷贝到形参处,形成实参的副本,有时间和空间的开销,若实参为结构体或者类的话,那么时空开销将会非常大;第二、函数中对实参副本的修改并不会影响到函数调用位置实参的值。C++的引用传递(pass-by-reference),一方面,参数传递的是把实参的地...原创 2019-07-29 10:16:49 · 1394 阅读 · 1 评论 -
C++中static_cast和dynamic_cast强制类型转换
前言说起C++中的继承、多态、虚函数等概念,可能很多同学都有所了解,但是要说真正熟知的同学可能就不是很多了。最近在编程过程中了解到C++类型的层次转换(这就涉及到了多态和继承的相关概率),通常C语言中可以对内置类型进行强制转换,但是这样做不是很安全,在C++标准中,提供了关于类型层次转换中的两个关键字static_cast和dynamic_cast。一、static_cast关键字(编译时...转载 2019-07-25 15:42:31 · 322 阅读 · 0 评论 -
指向结构体的指针必须初始化
#include<stdio.h>void main(){struct abc{int a;};struct abc *p;p->a=1;printf("%d",p->a);}这个编译没有问题,但是运行是段错误,请问为什么呢因为你定义了一个结构体指针p,用来指向此类结构体,但是你却没有给他赋值,此时p的值为NULL,你并没有在内存中为p分配任何空间,所...转载 2019-07-22 17:01:42 · 872 阅读 · 0 评论 -
#pragma once和#ifndef
C语言中的头文件只是简单的复制粘贴。C语言中变量、函数、结构体的定义和声明两个过程是分离的。声明通常放在头文件中,为了防止重复声明,需要保证头文件中的内容在构建obj文件时只被包含一次。这可以通过#ifndef宏定义和#pragma once两种方式实现。#ifndef宏定义的方式:#ifndef SOME_UNIQUE_NAME_HERE#define SOME_UNIQUE_NA...原创 2019-08-31 14:03:17 · 341 阅读 · 0 评论 -
c++内联函数解析(inline)
一、基本定义 inline是C++语言中的一个关键字,可以用于程序中定义内联函数,inline的引进使内联函数的定义更加简单。说到内联函数,这里给出比较常见的定义,内联函数是C++中的一种特殊函数,它可以像普通函数一样被调用,但是在调用时并不通过函数调用的机制而是通过将函数体直接插入调用处来实现的,这样可以大大减少由函数调用带来的开销,从而提高程序的运行效率。一般来说inline用...转载 2019-09-01 18:54:19 · 453 阅读 · 0 评论 -
C++多态--虚函数virtual及override
C++多态C++多态(polymorphism)是通过虚函数来实现的,虚函数允许子类重新定义成员函数,而子类重新定义父类的做法称为覆盖(override),或者称为重写。最常见的用法就是声明基类的指针,利用该指针指向任意一个子类对象,调用相应的虚函数,动态绑定。由于编写代码的时候并不能确定被调用的是基类的函数还是哪个派生类的函数,所以被成为“虚”函数。如果没有使用虚函数的话,即没有利用C++多...转载 2019-07-12 14:00:08 · 3253 阅读 · 0 评论 -
单例模式
前言:这是一篇我见过的讲单例模式最完整的,也是讲的最好的一篇博客文章。3. 1 单例模式的动机 对于一个软件系统的某些类而言,我们无须创建多个实例。举个大家都熟知的例子——Windows任务管理器,如图3-1所示,我们可以做一个这样的尝试,在Windows的“任务栏”的右键弹出菜单上多次点击“启动任务管理器”,看能否打开多个任务管理器窗口?如果你的桌面出现多个任务管理器...转载 2019-07-12 17:15:00 · 235 阅读 · 0 评论 -
CString.Format的详细用法(转)
在MFC程序中,使用CString来处理字符串是一个很不错的选择。CString既可以处理Unicode标准的字符串,也可以处理ANSI标准的字符串。CString的Format方法给我们进行字符串的转换带来了很大的方便,比如常见的int、float和double这些数字类型转换为CString字符串只需一行代码就可以实现。 先看看Format用于转换的格式字符: %c...转载 2019-03-07 09:23:31 · 1095 阅读 · 0 评论 -
C++类中this指针的理解
先要理解class的意思。class应该理解为一种类型,象int,char一样,是用户自定义的类型。用这个类型可以来声明一个变量,比如int x, myclass my等等。这样就像变量x具有int类型一样,变量my具有myclass类型。理解了这个,就好解释this了,my里的this 就是指向my的指针。如果还有一个变量myclass mz,mz的this就是指向mz的指针。 这样就很容易理解...转载 2019-01-15 16:14:18 · 404 阅读 · 2 评论 -
C++程序中出现undefined reference to ......
在C++代码中调用C的库文件,需加上extern "C",用来告知编译器:这是一个用C写成的库文件,请用C的方式连接他们。Undefined reference to 错误:这类错误是在连接过程中出现的,可能有两种原因∶一是使用者自己定义的函数或者全局变量所在源代码文件,没有被编译、连接,或者干脆还没有定义,这 需要使用者根据实际情况修改源程序,给出全局变量或者函数的定义体;1) 可以...转载 2018-11-27 11:35:45 · 11984 阅读 · 0 评论 -
【c++】STL里的priority_queue用法总结
1、头文件#include<queue>2、定义priority_queue<int> p;3、优先输出大数据priority_queue<Type, Container, Functional>Type为数据类型, Container为保存数据的容器,Functional为元素比较方式。如果不写后两个参数,那么容器默认用的是vec...转载 2018-11-23 15:35:53 · 2550 阅读 · 1 评论 -
std::priority_queue
定义于头文件 <queue> template< class T, class Container = std::vector<T>, class Compare = std::less<typename Container::value_type> > clas...原创 2018-11-23 15:29:37 · 1940 阅读 · 0 评论 -
关于VS2013下制作和使用静态库和动态库
引言什么是库:库是写好的现有的,成熟的,可以复用的代码。 所谓静态、动态是指链接。将一个程序编译成可执行程序的步骤:静态库在链接阶段,会将汇编生成的目标文件.o与引用到的库一起链接打包到可执行文件中。因此对应的链接方式称为静态链接。为什么还需要动态库?空间浪费是静态库的一个问题。 另一个问题是静态库对程序的更新、部署带来麻烦。如果静态库liba.lib更新了,所以使用它的应用...转载 2018-11-22 13:35:52 · 173 阅读 · 0 评论 -
std::cout和std::endl是什么意思?
转自https://zhidao.baidu.com/question/920135275266324739.html#include<iostream>int main(){ std::cout<<"Hello world!!!"<<std::endl;return 0;} std::cout<<"Hello wo...转载 2018-11-21 09:42:48 · 12163 阅读 · 0 评论 -
C++ vector 容器浅析
一、什么是vector?向量(Vector)是一个封装了动态大小数组的顺序容器(Sequence Container)。跟任意其它类型容器一样,它能够存放各种类型的对象。可以简单的认为,向量是一个能够存放任意类型的动态数组。二、容器特性1.顺序序列顺序容器中的元素按照严格的线性顺序排序。可以通过元素在序列中的位置访问对应的元素。2.动态数组支持对序列中的任意元素进行快速直接...转载 2018-11-15 15:56:51 · 214 阅读 · 0 评论 -
c++ std vector用法介绍
c++ vector一部分内容来自:http://blog.csdn.net/phoebin/article/details/3864590;http://www.cnblogs.com/wang7/archive/2012/04/27/2474138.html;一、在c++中,vector是一个十分有用的容器,下面对这个容器做一下总结。1 基本操作(1)头文件#include&l...转载 2018-11-15 15:45:27 · 9122 阅读 · 0 评论 -
C++中关于public、protect、private的访问权限控制
一:成员的访问权限1: public访问权限 一个类的public成员变量、成员函数,可以通过类的成员函数、类的实例变量进行访问 <实际上,类的成员函数,可以访问本类内的任何成员变量和成员函数>#include<iostream>#include<string> using namespace std; class Acce...转载 2018-09-08 22:19:45 · 422 阅读 · 0 评论 -
【Language - C++】构造函数的定义和构造函数的重载
构造函数:处理对象的初始化,是一种特殊的成员函数,与其他函数不同,不需要用户来调用它,在建立对象时自动执行。注意:(1)每建立一个对象,就调用一次构造函数;(2)构造函数没有返回值,因此也没有类型,作用只是对对象进行初始化;(3)构造函数不需要被用户调用,也不能被用户调用。构造函数的重载:构造函数具有相同的名字,而参数的个数或参数类型不相同。例1 编写一个基于对象的程序,在类...转载 2019-06-12 16:17:04 · 359 阅读 · 0 评论 -
【转】C语言结构体中的冒号用法
结构体中的冒号表示位域。位域出现的原因是由于某些信息的存储表示只需要几个bit位就可以表示而不需要一个完整的字节,同时也是为了节省存储空间和方便处理。其表示形式为:struct 位域结构名{类型说明符 位域名:位域长度}例如:struct bit_struct{int bit1:3;int bit2:5;int...转载 2018-06-08 10:41:25 · 6991 阅读 · 0 评论 -
返回值为对象的成员函数---一道编程题探讨
描述程序填空,使其按要求输出#include <iostream>using namespace std;class A {public: int val; A(int// 在此处补充你的代码};int main(){ int m,n; A a; cout << a.val << endl; ...转载 2019-07-08 22:15:26 · 632 阅读 · 0 评论 -
【Language - C++】类中的常成员函数的使用和定义
如果只对对象进行读操作,则该成员函数可以设计成常成员函数。设计成常成员函数的好处是:让使用者一目了然地知道该成员函数不会改变对象的值。常成员函数的声明和定义在形式上必须一致,即在函数形参列表的右括号后面加上const。//---------main.cpp------------ #include <iostream> using namespace std; ...转载 2019-07-08 14:33:33 · 745 阅读 · 0 评论