![](https://img-blog.csdnimg.cn/20201014180756925.png?x-oss-process=image/resize,m_fixed,h_64,w_64)
C/C++编程语言
文章平均质量分 60
Qu1et
这个作者很懒,什么都没留下…
展开
-
C 的宏和 C++的宏
总结一下C和C++的宏。大家经常使用的其实都是C中的宏,但是C++都延续了下来,先回顾一下。#define :定义宏#undef :取消宏#include :包含头文件#ifdef 如果宏已经定义,则返回真#ifndef 如果宏没有定义,则返回真#if 如果条件为真,则执行下面的#else 与#if互斥使用#elif 相当于我们使原创 2017-06-29 14:29:06 · 423 阅读 · 0 评论 -
C++类的默认函数
转自:https://www.cnblogs.com/yuwanxian/p/10924835.html在C++中,一个类有八个默认函数:默认构造函数; 默认拷贝构造函数; 默认析构函数; 默认重载赋值运算符函数; 默认重载取址运算符函数; 默认重载取址运算符const函数; 默认移动构造函数(C++11); 默认重载移动赋值操作符函数(C++11)。 只是声明...转载 2019-07-02 09:06:11 · 326 阅读 · 0 评论 -
C++实现智能指针
C++11增加了智能指针:shared_ptr、unique_ptr、weak_ptr为了加深理解,自己实现智能指针我们都知道shared_ptr的核心思想通过引用计数来管理内存先实现单个指针的自我管理,看下面template <class T>class Ref{public: Ref() : m_ptr(NULL) { } ...原创 2019-07-02 12:11:15 · 221 阅读 · 0 评论 -
C++实现Golang的defer
在golang中有个关键字defer,作用其实就是C++中的析构作用,作为释放资源,但是为什么还要实现它呢?主要就是为了“擦屁股”,避免程序员忘记后续操作。C++类似思想的包括智能指针,自解锁等先贴代码,再说用法class Defer final{public: explicit Defer(std::function<void()> fun) : m_funC...原创 2019-07-02 17:33:24 · 406 阅读 · 0 评论 -
异步定时器
需要一个定时器,想需要的功能有异步或者同线程阻塞式,直接上代码#pragma once#include<functional>#include<chrono>#include<thread>#include<atomic>#include<memory>#include<mutex>#include<...原创 2019-06-28 16:25:30 · 1290 阅读 · 0 评论 -
定时器
上文已经实现的定时器,但是在需要在主线程中可能无法满足需求https://blog.csdn.net/allen807733144/article/details/94014639于是我们有了下面代码:class Timer { public: void run() { auto it = m_vecTimer.begin(); for (; it != m_ve...原创 2019-06-28 16:30:00 · 121 阅读 · 0 评论 -
C++11实现Boost Any
#pragma once#include <memory>#include <typeindex>#include <stdexcept>#include <iostream>struct Any{ Any(void) : m_tpIndex(std::type_index(typeid(void))) {} Any(const ...原创 2019-06-28 16:50:25 · 684 阅读 · 0 评论 -
单例模式
上文提到了定时器https://blog.csdn.net/allen807733144/article/details/94015407这个类如果当作单例,那么要加的代码又太多了,故看到用宏来代替一大段代码先上单例代码:#ifndef _SINGLETON_H#define _SINGLETON_H#include <iostream>template<...原创 2019-06-28 17:52:40 · 183 阅读 · 0 评论 -
C++实现JAVA中的synchronized
java中的同步类似这样:synchronized(x){ ...}这个只是代码块,这里也只讨论代码块。稍微思考,也只是采取了一种思想,即自解锁这种那么先上代码#include <mutex>struct lugard_sync{ explicit lugard_sync(std::mutex &_mutex) : m_mutex(...原创 2019-07-10 11:00:17 · 1449 阅读 · 2 评论 -
C++ 虚继承
C++中有虚继承和虚函数,这两者也并没有什么关系。虚继承主要解决的问题即多继承产生的二义性。基类只存在一份实例。即菱形继承,参考下图举个例子:基类为动物类,分别派生了陆地动物和水中动物,两栖动物又继承自他们两如果普通继承,两栖动物会对基类中的信息产生二义性,故有了虚继承例如:class Base{ public: int m_dat...原创 2019-07-05 10:08:32 · 168 阅读 · 0 评论 -
体重指数
分享一个有趣的计算用户体重指数的C++程序,码农在工作中也注意自己的身体用户输入代码char r;do { float TB, IMT; int BB; printf("Body Mass Index (BMI) Calculator\n"); printf("================================\n\n"); printf("BW : Wei...原创 2019-07-01 12:12:06 · 423 阅读 · 0 评论 -
获取系统CPU个数
小积累 windows#include <windows.h> SYSTEM_INFO sysInfo; GetSystemInfo(&sysInfo); int num_cpu = sysInfo.dwNumberOfProcessors; linux#include <unistd.h>int num_c...原创 2018-11-07 15:30:05 · 599 阅读 · 0 评论 -
计算FPS的六种方式
版权声明:本文为博主原创文章,未经博主允许不得转载。 https://blog.csdn.net/u012494876/article/details/53368164帧率(FPS)计算是游戏编程中常见的一个话题。大体来说,总共有如下六种方法:一、固定时间帧数法帧率计算的公式为:fps = frameNum / elapsedTime;1如果记录固定时间内的帧数,就可以...转载 2018-09-27 09:41:49 · 12657 阅读 · 2 评论 -
C++11实现一个自动注册的工厂
转自:https://www.cnblogs.com/qicosmos/p/5090159.html实现动机 工厂方法是最简单地创建派生类对象的方法,也是很常用的,工厂方法内部使用switch-case根据不同的key去创建不同的派生类对象,下面是一个伪代码。Message* create(int type){ switch (type) { case MS...转载 2018-06-11 16:11:55 · 1199 阅读 · 0 评论 -
c和c++混合使用
我们编写代码,经常需要c和c++混合使用,为了使 C 代码和 C++ 代码保持互相兼容的过程调用接口,需要,为了简化,从而定义了两个宏方面我们使用1.在 C++ 代码里加上 extern “C” 作为符号声明的一部分。2.__BEGIN_DECLS 和 __END_DECLS 在C语言代码中头文件中,充斥着下面的代码片段:__BEGIN_DECLS原创 2017-06-22 13:52:19 · 3832 阅读 · 0 评论 -
#define用法总结
其实大家都在用到#define,但是还是总结一下#define的用法,分享一下转自:http://www.dingge.com/main/article.asp?id=101.简单的define定义#define MAXTIME 1000一个简单的MAXTIME就定义好了,它代表1000,如果在程序里面写if(i编译器在处理这个代码之前会对MAX原创 2017-06-22 14:00:32 · 928 阅读 · 0 评论 -
自解锁lock_guard
今天遇到lock_guard,大概学习了一下,先贴出源码。// LOCKStemplateclass lock_guard{ // class with destructor that unlocks mutexpublic:typedef _Mutex mutex_type;explicit lock_guard(_Mutex& _Mtx): _MyMut原创 2017-06-22 14:42:53 · 9166 阅读 · 0 评论 -
new的数据能用free吗?
转自:http://blog.csdn.net/stpeace/article/details/39087571我的标题是我今天看到的一个面试题,看到之后我没急着回答,而是想了一下。凭自己的直觉吧,猜了个“不可以”的答案,虽然对了,但我不知道为什么。于是我就查查资料了:不可以,new对应delete不可以张冠李戴。malloc/free,new/delete必需转载 2017-06-22 17:24:45 · 5104 阅读 · 0 评论 -
C++11 for
ex1:遍历字符串std::string str = “hello, world”; for(auto ch : str) { std::cout } std::string str = “hello, world”;for(auto ch : str) { std::cout << ch << std::endl;}遍历str,输出转载 2017-11-29 16:42:29 · 484 阅读 · 0 评论 -
为什么 C++ 中提倡尽量避免使用宏 #define(转)
转自:http://euyuil.com/blog/why-avoid-define-in-cplusplus/C++ 的书上常说,尽量不要用 #define 来定义常量。这究竟是为什么呢?其实 C++ 并不仅仅不提倡用宏来定义常量,而且还不提倡用宏来定义“函数”。事实上 C++ 并不是很喜欢预处理宏,在很多很多方面,如果不是必需,尽量不要使用预处理宏。为什么 C++转载 2017-11-29 17:04:46 · 7453 阅读 · 2 评论 -
enable_shared_from_this 心得
今天看kanzi中的结构,发现Node不仅继承了Object,而且还继承了一个模板类enable_shared_from_this百度搜搜,原来如此。我们在使用各种Node的时候都是使用的智能指针,而他通过继承模板类enable_shared_from_this,将普通指针转为智能指针,而智能的计数是个问题,这样就避免了各种因为析构问题带来的问题。注:智能指针不能依赖裸指针shar原创 2018-01-25 11:02:21 · 305 阅读 · 0 评论 -
iniparser解析API
上次说了iniparser在windows上一些注意的问题,其实用的最多的还是API,一下列出int iniparser_getnsec(dictionary * d); //获取dictionary对象的section个数 char * iniparser_getsecname(dictionary * d, int n); //获取dictionary对象的第n个section的名字 v...原创 2018-05-08 09:03:09 · 965 阅读 · 0 评论 -
C++11实现信号量
由于C++11 和 Boost.Thread 都没有提供信号量,但是对于这个简单的东西,有时候使用就是太简单,但是为什么没有,可能他们觉得是这个东西太容易出错了,所以自己实现也不是很复杂。直接上代码: #include <condition_variable>#include <mutex>class Semaphore{public:Semaphore(unsigned...原创 2018-05-25 15:35:37 · 3703 阅读 · 2 评论 -
C 位域
今天说说C中的位域,在很多地方还是很有作用的,本来能画100解决的问题你用50解决何尝不是一种好方法。废话不多说,先上代码:struct { unsigned int widthValidated; unsigned int heightValidated; } status;这个结构需要8个字节的空间,但是如果我们只是保存true/false,定义一个这样的变量是不是有点浪费。所以原创 2017-06-29 14:24:33 · 434 阅读 · 0 评论