C/C++
Poo_Chai
让代码活起来!
展开
-
C++常见的I/O宏
C++常见IO宏原创 2022-10-09 11:00:42 · 465 阅读 · 0 评论 -
gcc编译参数的指定问题
那些以.开头的行主要用于后期链接时期使用的辅助信息,不会实际执行。生成的.s文件中的以.开头的行,可以直接删掉,得到纯汇编代码。-m32 :指定32位编译。-m64:指定64位编译。1. 指定生成汇编代码: -S。原创 2023-05-13 09:15:40 · 236 阅读 · 0 评论 -
模板函数匹配规则
模板函数匹配是一般规则是:1. 先匹配模板及其重载(模板本身的匹配)2. 上面一步没匹配到的话,再继续匹配特例化模板(模板实例化的匹配)可以看看下面的代码:// Example program#include <iostream>#include <string>using namespace std;template<class T> /// 1void foo(T t) { cout << 0;}tem原创 2022-04-30 10:37:53 · 421 阅读 · 0 评论 -
C++常用容器内存分布情况
首先,强调一点,对象(如容器)本身的存储位置和其数据的存储位置往往不是在一起的,比如堆栈存储分离的模式。先举个例子:vector和arrayvector和arrayarray是c++11之后新加的容器类型,他比vector更加轻便。 array的数据存储在栈中,vector的数据存储在堆中。所以 array容器处理数据的效率更快 vector处理数据的量更大 vector更强大,封装的函数更多;array更轻便,更适合一些操作简单,数据量比较少的情况。另外,其他的容器,智能指原创 2022-04-29 09:45:15 · 1354 阅读 · 0 评论 -
使用{}和()调用构造函数的区别
使用{}和()调用构造函数有哪些区别呢?我们知道,初始化列表是C++11后新加的特性,用来方便类类型的初始化。另外,它也可以用在基本类型的初始化上。原创 2022-04-28 17:49:45 · 1375 阅读 · 0 评论 -
算法题解1
题目:给定一个二维数组,数字表示海拔高度,输入起始点和终点,判断从起始点能否达到终点?条件:1. 搜寻过程,每次只能移动一步,步长为1,且海拔为0的点才能作为搜寻经过的路线2. 搜寻过程中,直角拐弯(90度)次数不能超过K次, K=2例子:矩阵matrix=[[1 0 5 5][3 0 0 3][5 7 0 1]]起点:(0,0), 终点:(2,3)输出: No解题思路:(1)路径搜索,用回溯算法,必须定义访问数组vis(...原创 2022-04-21 19:15:57 · 1000 阅读 · 0 评论 -
Linux IO模式及 select、poll、epoll详解
注:本文是对众多博客的学习和总结,可能存在理解错误。请带着怀疑的眼光,同时如果有错误希望能指出。同步IO和异步IO,阻塞IO和非阻塞IO分别是什么,到底有什么区别?不同的人在不同的上下文下给出的答案是不同的。所以先限定一下本文的上下文。本文讨论的背景是Linux环境下的network IO。一 概念说明在进行解释之前,首先要说明几个概念:- 用户空间和内核空间- 进程切换- 进程的阻塞- 文件描述符- 缓存 I/O用户空间与内核空间现在操作系统都是采用虚拟存储器,那.转载 2022-04-05 20:14:50 · 565 阅读 · 0 评论 -
c/c++函数调用栈入栈顺序
{...6 bool flag;7 int a = 12;8 char c = 'k';9 addToFirst(a, c);//把结果赋给第一个参数,引用传递10 flag = 12 > a;...}当运行到行9时,系统栈上新建一个栈帧,依次入栈:c,a,下一条指令地址,如下:第10行代码指令地址//代码区调用指令的下一条指令地址压入栈中,供函数返回时继续执行 (栈顶)ac...原先栈的内容(栈底)原创 2022-04-05 16:25:59 · 1405 阅读 · 0 评论 -
C++11 POD类型
C++11 POD类型POD,全称plain old data,plain代表它是一个普通类型,old代表它可以与c兼容,可以使用比如memcpy()这类c中最原始函数进行操作。C++11中把POD分为了两个基本概念的集合,即:平凡的(trival)和标准布局的(standard layout)。1、首先是平凡的(trival)定义,通常一个平凡的类或者结构体需要满足以下定义 (1).拥有平凡的默认构造函数和析构函数。默认的意思就是由编译器为我们自动生成的,不许是我们自己定义的,而一旦定义了构转载 2020-10-03 10:09:40 · 306 阅读 · 0 评论 -
c++ define的用法(转)
蒂其之死c++ define的用法(转)#define是C语言中提供的宏定义命令,其主要目的是为程序员在编程时提供一定的方便,并能在一定程度上提高程序的运行效率,但学生在学习时往往不能 理解该命令的本质,总是在此处产生一些困惑,在编程时误用该命令,使得程序的运行与预期的目的不一致,或者在读别人写的程序时,把运行结果理解错误,这对 C语言的学习很不利。1 #define命令剖析1.1 #...转载 2019-12-21 15:42:42 · 692 阅读 · 0 评论 -
assert用法,原理,改编(C++)
最近才发现,原来assert这么好用啊。。。再看看是怎么实现的,又找到了些有趣的东西。用法:先包含#inlcude <assert.h>在想用的地方给一句:assert(expression)就可以了。expression是任意有效的逻辑表达式。比如:FILE *fp = fopen("in.txt","r") ;if ( ! fp ){ exit(0) ...转载 2019-11-13 16:52:20 · 285 阅读 · 0 评论 -
#pragma warning 指令集
#pragma warning 指令集该指令允许有选择性的修改编译器的警告消息的行为指令格式如下:#pragma warning( warning-specifier : warning-number-list [; warning-specifier : warning-number-list…]#pragma warning( push[ ,n ] )#pragma war...转载 2019-11-13 16:39:23 · 233 阅读 · 0 评论 -
如何有效解决C与C++的相互调用问题
在实际工作中可能经常要进行C和C++的混合编程,C++调用C语言的代码通常都比较容易,但也有一些细节需要注意。C要调用C++的代码就略为麻烦一些,因为C不支持面向对象的特征。首先我们来看一下C++调用C语言的代码。要让你的C代码既能被C代码又能被C++调用虽说容易,但是还是有需要注意的地方。现有三个文件分别如下:/* file TestC.h */#ifndef TESTC_H#defin...转载 2019-11-13 15:59:03 · 290 阅读 · 0 评论 -
GitHub C/C++项目新奇写法
1. 对象的特殊初始化:逗号表达式,结果返回逗号表达式中最后一项。#define MKSTATUS(ret, codev) ( ret.code=codev, ret.sourcefile=__FILE__, ret.sourcelineno=__LINE__, ret )2. 枚举类型,用作常量 (C++11中可采用匿名namespace的方式定义)typedef enum S...原创 2019-11-13 16:08:14 · 420 阅读 · 0 评论 -
C/C++程序员必须熟练应用的开源项目
其他最全参考:值得学习的C++项目开源作为一个经验丰富的C/C++程序员, 肯定亲手写过各种功能的代码, 比如封装过数据库访问的类, 封装过网络通信的类,封装过日志操作的类, 封装过文件访问的类, 封装过UI界面库等, 也在实际的项目中应用过, 但是回过头仔细想想,其实以前自己写过的这些代码,只能是在特定的项目或者特定的环境中使用, 对于自己来说, 在不同的项目中应用, 只需要复制代码, ...转载 2019-11-13 15:23:40 · 242 阅读 · 0 评论 -
从硬件级别说明for和if..else的利弊
1.实际工作中,除了描述仿真测试激励时使用for循环语句外,极少在RTL级编码中使用for循环这是因为for循环会被综合器展开为所有变量情况的执行语句,每个变量独立占用寄存器资源,不能有效的复用硬件逻辑资源,造成巨大的浪费。一般常用case语句代替。2. if…else…和case在嵌套描述时是有很大区别的if…else…是有优先级的,一般来说,第一个if的优先级最高...转载 2019-11-02 19:06:57 · 539 阅读 · 0 评论 -
高效C++:模板和泛型编程
模板和泛型编程的关注重点在编译期,所有的行为都在编译期确定,因此其规则和玩法也有自己特殊的一套,和其他模块不通用。了解隐式接口和编译期多态了解typename的双重含义 声明template参数时,前缀关键字class和typename可以互换 使用typename关键字声明嵌套从属类型名称,但不可以出现在基类列表和初始化里列表中 嵌套从属名称 ...转载 2019-10-28 10:44:39 · 194 阅读 · 0 评论 -
Linux 互斥锁、原子操作实现原理
futex(快速用户区互斥的简称)是一个在Linux上实现锁定和构建高级抽象锁如信号量和POSIX互斥的基本工具。它们第一次出现在内核开发的2 5 7版;其语义在2 5 40固定下来,然后在2 6 x系列稳定版内核中出现。在Linux下,信号量和线程互斥锁的实现都是通过futex系统调用。futex(快速用户区互斥的简称)是一个在Linux上实现锁定和构建高级抽象锁如信号量和POSIX互斥的...转载 2019-10-28 09:57:20 · 924 阅读 · 0 评论 -
内存泄漏及其检测方法
文章目录一、内存泄漏的定义二、VS下内存泄漏的检测方法(CRT)三、Linux系统下内存泄漏的检测方法(valgrind)一、内存泄漏的定义 内存泄漏指的是在程序里动态申请的内存在使用完后,没有进行释放,导致这部分内存没有被系统回收,久而久之,可能导致程序内存不断增大,系统内存不足……引发一系列灾难性后果。二、VS下内存泄漏的检测方法(CRT)#defi...转载 2019-10-28 08:42:43 · 362 阅读 · 0 评论 -
单例模式的优缺点和使用场景
单例模式的优缺点和使用场景转载:http://www.tools138.com/create/article/20150929/020009847.html首先介绍一下单例模式: 单例模式(Singleton),也叫单子模式,是一种常用的软件设计模式。在应用这个模式时,单例对象的类必须保证只有一个实例存在。许多时候整个系统只需要拥有一个的全局对象,这样有利于我们协调系统整体的行为...转载 2019-10-27 14:34:59 · 199 阅读 · 0 评论 -
C++中为什么构造函数不能定义为虚函数
关于C++为什么不支持虚拟构造函数,Bjarne很早以前就在C++Style and Technique FAQ里面做过回答Avirtual call is a mechanism to get work done given partialinformation. In particular, "virtual" allows us to call afunction knowing on...转载 2019-10-27 14:29:52 · 274 阅读 · 0 评论 -
select、poll、epoll之间的区别(内容最权威***)
select、poll、epoll之间的区别(搜狗面试)(1)select==>时间复杂度O(n)它仅仅知道了,有I/O事件发生了,却并不知道是哪那几个流(可能有一个,多个,甚至全部),我们只能无差别轮询所有流,找出能读出数据,或者写入数据的流,对他们进行操作。所以select具有O(n)的无差别轮询复杂度,同时处理的流越多,无差别轮询时间就越长。(2)poll==>时间复...转载 2019-10-27 08:55:14 · 207 阅读 · 0 评论 -
C/C++产生一定范围内随机数的若干问题
rand()不需要参数,它会返回一个从0到最大随机数的任意整数,最大随机数的大小通常是固定的一个大整数。#include<stdlib.h> //rand()1. 产生+-范围的随机数的方法: -b ~ +b rand_ = rand()%(2*b) - b;2. 浮点随机数的产生方式 #include <math.h&g...原创 2019-10-20 18:46:51 · 374 阅读 · 0 评论 -
VS2017 C++项目常见问题
1.cl: 命令行 error D8016 :“/ZI”和“/Gy-”命令行选项不兼容今天用vs2019打开一个VC6.0的dsw项目。编译不通过,原因是命令行选项不兼容。错误代码:1>cl: 命令行 warning D9035 :“Gm”选项已否决,并将在将来的版本中移除 1>cl: 命令行 error D8016 :“/ZI”和“/Gy-”命令行选项不兼容...原创 2019-10-20 15:28:18 · 3430 阅读 · 3 评论 -
TCP头部分析与确认号的理解
TCP头部分析与确认号的理解1、TCP的特点:基于字节流面向连接可靠传输缓冲传输全双工流量控制2、头部格式和说明图源百度。如下图示,就是TCP包的头部结构。可以看到这个头部最少有4x5=20个字节。另外还需要理解TCP协议是承载在IP协议中的。关于IP协议可以参考:http://www.cnblogs.com/xcywt/p/8067521.html源端...转载 2019-10-18 19:01:53 · 1814 阅读 · 0 评论 -
TCP粘包问题分析和解决(全)
TCP粘包问题分析和解决(全)TCP通信粘包问题分析和解决(全)在socket网络程序中,TCP和UDP分别是面向连接和非面向连接的。因此TCP的socket编程,收发两端(客户端和服务器端)都要有成对的socket,因此,发送端为了将多个发往接收端的包,更有效的发到对方,使用了优化方法(Nagle算法),将多次间隔较小、数据量小的数据,合并成一个大的数据块,然后进行封包。这样,接收端,就...转载 2019-10-18 13:19:58 · 332 阅读 · 0 评论 -
pthread线程属性介绍
pthread线程属性介绍其他参考: 1.pthread 线程属性(最全,重点参考*****) 2.pthread线程库使用介绍线程属性创建线程函数int pthread_create (pthread_t* restrictthread, const pthread_attr_t* restrict...转载 2019-10-18 11:02:30 · 403 阅读 · 0 评论 -
gcc与g++的区别
1.gcc与g++的区别2.gcc和g++的区别原创 2019-10-18 10:56:31 · 150 阅读 · 0 评论 -
c/c++中struct和class的区别
1. 字面上的区别在字面上struct是structure的缩写,通常叫做“结构体”,在C语言里用于将多种数据、多个变量组织在一起,便于表达比较复杂的数据类型,在C++中为了兼容C语言保留了该关键字,并且保留了C语言中的所有功能。而class,则称作“类”,是C++新增来支持面向对象思想概念中“类”的概念的一个关键词,并且比struct具有了更强大的功能,不仅可以像C语言中的struct一...转载 2019-04-17 09:33:06 · 593 阅读 · 0 评论 -
C++内存对齐总结
C++内存对齐总结 大家都知道,C++空类的内存大小为1字节,为了保证其对象拥有彼此独立的内存地址。非空类的大小与类中非静态成员变量和虚函数表的多少有关。而值得注意的是,类中非静态成员变量的大小与编译器内存对齐的设置有关。成员变量在类中的内存存储并不一定是连续的。它是按照编译器的设置,按照内存块来存储的,这个内存块大小的取值,就是内存对齐。一、引入问题。#inclu...转载 2019-04-17 09:51:27 · 203 阅读 · 0 评论 -
c++中#pragma用法详解
在所有的预处理指令中,#Pragma 指令可能是最复杂的了,它的作用是设定编译器的状态或者是指示编译器完成一些特定的动作。#pragma指令对每个编译器给出了一个方法,在保持与C和C++语言完全兼容的情况下,给出主机或操作系统专有的特征。依据定义,编译指示是机器或操作系统专有的,且对于每个编译器都是不同的。其格式一般为: #pragma Para。其中Para 为参数,下面来看一些常用的参数:...转载 2019-04-17 09:58:40 · 9311 阅读 · 0 评论 -
面向对象特性
面向对象有三种特性:封装继承多态 其中多态性有两种,一种是依靠 函数重载 实现的 静态绑定 ,一种是依靠 虚函数 实现的 动态绑定。继承:子类从父类派生,继承父类的特点并拥有自己新的特点,体现了特殊与一般的关系。 模板:是对具有相同特性的函数或类的再抽象,是一种参数化的多态性工具。模板的使用为各种逻辑功能相同而数据类型不同的程序提供一种代码共享的机制。 动态...转载 2019-04-17 11:02:29 · 97 阅读 · 0 评论 -
C++标准规定类内存
C++标准规定类的大小不为0,空类的大小为1,当类不包含虚函数和非静态数据成员时,其对象大小也为1。对有虚函数的类来说,必须为它的对象提供运行时类型信息(RTTI,Run-Time Type Information)和关于虚函数表的信息,常见的做法是在对象中放置一个指向虚函数表的指针,此外,为了支持RTTI,许多编译器都把该类型信息放在虚函数表中。但是,是否必须采用这种实现方法,C++标准没有...转载 2019-04-17 11:08:49 · 233 阅读 · 0 评论 -
几种在线C++语言编程环境
1.在线工具,它支持几乎所有主流编程语言。https://tool.lu/coderunner/2.http://www.dooccn.com/cpp/3. Compile and Execute C++11 Online (GNU GCC v7.1.1),使用gcc编译(强烈推荐!)http://www.tutorialspoint.com/compile...原创 2019-04-17 14:46:16 · 8696 阅读 · 0 评论 -
C++命名规则
参考:1.https://www.cnblogs.com/TS-qrt/articles/c_c_name.html2.https://www.cnblogs.com/heyonggang/p/3362873.html原创 2019-05-03 20:10:59 · 129 阅读 · 0 评论 -
Visual Studio Code (vscode) 配置C、C++环境/编写运行C、C++(主要Windows、简要Linux)
配置参考网址:(核心参考)https://www.zhihu.com/question/30315894https://www.cnblogs.com/xenny/p/10139988.htmlhttps://blog.csdn.net/bat67/article/details/76095813原创 2019-04-19 15:44:24 · 793 阅读 · 0 评论 -
C++中头文件(.h)和源文件(.cpp)都应该写些什么
C++中头文件(.h)和源文件(.cpp)都应该写些什么C++头文件参考文献:本文摘自:https://www.cnblogs.com/fenghuan/p/4794514.html其他参考:【C++】C++中头文件的使用https://blog.csdn.net/u013921430/article/details/79110015【C++】C++中的头文件(.h)—详解...转载 2019-04-24 15:06:46 · 442 阅读 · 2 评论 -
C++ AMP 概述
C++ AMP 概述 2018年04月04日⁄ 综合⁄ 共 9342字 ⁄ 字号小中大⁄评论关闭 C++ 加速的大量并行 (C++ AMP) 加速 C++ 代码的执行利用数据并行的硬件 (如在离散图形卡的图像单元 (GPU)。使用 C++ AMP,可以编写多维数据算法使用在异类硬件,的并行执行,以便可以加速。C++ AMP 编程模型包括多维数组、索引,内存调用...转载 2019-05-06 20:09:15 · 1143 阅读 · 0 评论 -
C++ AMP 学习笔记
C++ AMP是微软研究人员开发的一个并行计算库,有了它就可以让程序在为并行计算设计的硬件上运行(比如显卡)。和AMD鼓吹的OpenCL一样,C++ AMP也是一个开放的开发标准,所以与Nvidia的cuda不同,它并不依赖于特定的硬件(比如Nvidia的Geforce系列显卡)。目前微软提供了Visual Studio平台上的开发工具集(Intellisense, 调试,性能优化),未来可...转载 2019-05-06 21:00:59 · 856 阅读 · 0 评论 -
pthread.h头文件源代码
NAMEpthread.h - threadsSYNOPSIS#include <pthread.h>DESCRIPTIONThe<pthread.h>header defines the following symbols:PTHREAD_CANCEL_ASYNCHRONOUSPTHREAD_CANCEL_ENABLE...转载 2019-05-14 16:03:31 · 3923 阅读 · 0 评论