![](https://img-blog.csdnimg.cn/20201014180756780.png?x-oss-process=image/resize,m_fixed,h_64,w_64)
C++
文章平均质量分 61
陌尘(MoChen)
程序员码龄: 14+年
IT从业经验: 10+年
曾任职单位: 北大方正,阿里巴巴
出版的书籍: 《人人都懂设计模式》、《Python 設計模式》
擅长的语言: C++/Python/JavaScript
涉及的技术: 电子书SDK,PC户端开发,Linux应用开发,前端开发
涉及的行业: 电子出版,在线教育,文档协调,智能机器人
展开
-
C++ 11 nullptr 比 NULL 的优势比较
NULL:预处理变量,是一个宏,它的值是 0,定义在头文件 中,即 #define NULL 0。nullptr:C++ 11 中的关键字,是一种特殊类型的字面值,可以被转换成任意其他类型。原创 2024-07-27 21:08:43 · 445 阅读 · 0 评论 -
C++ 字符串处理4-根据指定的分隔符将字符串分割为多个子串&根据指定的分隔符将多个子串连接成一个字符串
C++ 字符串处理 分割字符串 连接字符串 跨平台原创 2024-06-13 23:15:53 · 435 阅读 · 0 评论 -
C++ 字符串处理3-实现starts_with和ends_with的字符串判断功能
C++ 字符串处理 starts_with ends_with std::string 跨平台原创 2024-06-13 23:14:01 · 464 阅读 · 0 评论 -
C++ 字符串处理-去除字符串前后的空字符
C++ 字符串处理 去除字符串前后的空字符 跨平台原创 2024-05-25 17:48:22 · 564 阅读 · 0 评论 -
C++ 字符串处理-将字符串转成大写或小写
C++ 字符串处理 将字符串转成大小或小写 跨平台原创 2024-05-25 17:46:40 · 485 阅读 · 0 评论 -
C++ 时间处理-日期时间类
## 1. 关键词C++ 时间处理 日期时间类 跨平台## 2. 问题为什么C++就没有一个方便好用的表示日期时间的类?那~ 有没有更简洁、漂亮的实现方式呢?答案是:**自己写一个!**## 3. 设计理念- 极简- 易用- 跨平台## 4. 支持的能力- 获取当前时间- 获取UTC时间- 格式化时间- 从字符串解析时间- 时间差计算- 时间精度:毫秒级原创 2024-05-23 22:23:30 · 972 阅读 · 0 评论 -
C++ 时间处理-从字符串中解析日期时间
## 1. 关键词C++ 时间处理 从字符串中解析日期时间 跨平台## 2. 问题C++如何将字符串的日期时间解析成对应的时间戳?## 3. 解决思路- 可以用正则表达式将字符串解析成 struct tm 类型的对象。- mktime()函数可以将 struct tm 类型的时间转换成时间戳。原创 2024-05-23 22:20:16 · 957 阅读 · 0 评论 -
C++ 时间处理-统计函数运行时间
## 1. 关键词C++ 时间处理 统计函数运行时间 跨平台## 2. 问题C++如何简单便捷地实现“函数运行时间的统计”功能?## 3. 解决思路- 类的构造函数:会在对象初始化的时候被调用。- 类的析构函数:会在对象销毁的时候被调用。- 局部对象的生命周期:对象实例化(也就是初始化)时开始,退出作用域时结束。原创 2024-05-22 21:52:35 · 309 阅读 · 0 评论 -
C++ 时间处理-格式化时间区间
C++ 时间处理 格式化时间区间 跨平台 支持秒/微秒/毫秒使用场景:对执行时间、执行时长的格式化输出。原创 2024-05-22 21:50:32 · 242 阅读 · 0 评论 -
C++时间处理-格式化时间戳
C++ 时间处理 格式化时间戳 跨平台 支持秒/微秒/毫秒原创 2024-05-20 19:50:28 · 401 阅读 · 0 评论 -
C++时间处理-获取系统开机到现在的运行时间
C++ 时间处理 系统开机到现在的运行时间 跨平台 支持秒/微秒/毫秒原创 2024-05-20 19:29:52 · 286 阅读 · 0 评论 -
C++时间处理-获取当前时间戳
C++ 时间处理 获取当前时间戳 跨平台 支持秒/微秒/毫秒原创 2024-05-19 22:48:16 · 387 阅读 · 0 评论 -
c++ 时间类型详解(time_t和tm)
Unix时间戳(Unix timestamp),或称Unix时间(Unix time)、POSIX时间(POSIX time),是一种时间表示方式,定义为从格林威治时间1970年01月01日00时00分00秒起至现在的总秒数。Unix时间戳不仅被使用在Unix 系统、类Unix系统中,也在许多其他操作系统中被广告采用。目前相当一部分操作系统使用32位二进制数字表示时间。此类系统的Uni转载 2014-03-02 15:29:57 · 198972 阅读 · 4 评论 -
回调的原理、实现与应用
什么是回调 上一篇文章中讲了“函数的指针”,那么函数指针有什么用呢?一个最常用的地方就是回调。 什么回调?维基百科是这样解释的:回调是一段可执行的代码通过参数传递给别一段代码,以期望在一个合适的时间调用这个参数(可执行的代码)。 参考:In computer programming, a callback is a piece of executable code that is原创 2014-11-06 23:21:58 · 11189 阅读 · 0 评论 -
new/delete 和malloc/free 的区别
原文:http://www.cnblogs.com/biyeymyhjob/archive/2012/07/16/2593754.html一、基本概念 malloc/free:1、函数原型及说明: void *malloc(long NumBytes):该函数分配了NumBytes个字节,并返回了指向这块内存的指针。如果分配失败,则返回一个空指针(NULL)。 void转载 2015-06-07 10:22:06 · 2911 阅读 · 0 评论 -
Visual Studio 2010 中的 MSDN 帮助文档
原文:http://blog.csdn.net/youoran/article/details/8294907一、安装及使用Visual Studio 2010中的MSDN帮助文档较之前版本有了很大的不同,它使用了Microsoft Help Viewer。在安装Visual Studio 2010的时候会自动安装Microsoft Help Viewer。安装完V转载 2014-04-11 22:50:28 · 8422 阅读 · 2 评论 -
C++拷贝构造函数详解
一. 什么是拷贝构造函数首先对于普通类型的对象来说,它们之间的复制是很简单的,例如:[c-sharp] view plaincopyint a = 100; int b = a; 而类对象与普通对象不同,类对象内部结构一般较为复杂,存在各种成员变量。下面看一个类对象拷贝的简单例子。[c-sharp] view plaincopy#include using namespace std;转载 2015-05-13 17:03:09 · 1638 阅读 · 0 评论 -
const T、const T*、T *const、const T&、const T*& 的区别
这里的T指的是一种数据类型,可以是int、long、doule等基本数据类型,也可以是自己类型的类型class。单独的一个const你肯定知道指的是一个常量,但const与其他类型联合起来的众多变化,你是不是就糊涂了?下面我们一一来解析。const T、const T*、T *const、const T&、const T*& 的区别原创 2015-05-09 12:35:55 · 31644 阅读 · 10 评论 -
do...while(0)在宏定义中的巧妙用法
大家都知道,do…while(condition)可以表示循环,但你有没有遇到在一些宏定义中可以不用循环的地方,也用到了 do…while.比如:#define DELETE_POINTER(p) \ do \ { \ if(NULL != p)原创 2014-08-14 20:04:20 · 23728 阅读 · 0 评论 -
C++如何跳出多层循环
C++如何跳出多层循环虽然说语言是互通的,各种计算机语言的基本逻辑结构是类似的,但不同的语言之间还是有一些差别的。如循环中的break,在java中可以后面带标志:break [flag](flag为要结束的循环层数),但在C++中没有这个标志。那C++中如何跳出多重循环呢?以问题为例:问题主题:抽签问题描述:将写有数原创 2013-11-17 12:41:37 · 56382 阅读 · 2 评论 -
CString与string、char*的区别和转换
我们在C++的开发中经常会碰到string、char*以及CString,这三种都表示字符串类型,有很多相似又不同的地方,常常让人混淆。下面详细介绍这三者的区别、联系和转换:各自的区别char*:char*是一个指向字符的指针,是一个内置类型。可以指向一个字符,也可以表示字符数组的首地址(首字符的地址)。我们更多的时候是用的它的第二的功能,来表示一个字符串,功能与字符串数组原创 2014-03-01 20:34:42 · 40914 阅读 · 5 评论 -
C Runtime Library 的来历
运行时库就是C Run-Time Library,是C而非C++语言世界的概念。取这个名字就是因为你的C程序运行时需要这些库中的函数。C Run-Time Library里面含有初始化代码,还有错误处理代码(例如divide by zero处理)。你写的程序可以没有 math库,程序照样运行,只是不能处理复杂的数学运算,不过如果没有了C Run-Time Library,main()就不会被调用,exit()也不能被响应。因为C Run-Time Library包含了C程序运行的最基本和最常用的函数。到转载 2015-10-11 17:45:59 · 8379 阅读 · 1 评论 -
各种基本类型与string的转换
基于C++11标准如果你用的编译器是基于最新的C++11标准,那么这个问题就变的很简单,因为string>中已经封装好了对应的转换方法:标准库中定义了to_string(val);可以将其它类型转换为string。还定义了一组stoi(s,p,b)、stol(s,p,b)、stod(s,p,b)等转换函数,可以函数,可以分别转化成int、long、double等. stoi(s原创 2014-03-04 23:25:43 · 22054 阅读 · 3 评论 -
assert预处理宏与预处理变量
assertassert是一个预处理宏,由预处理器管理而非编译器管理,所以使用时都不用命名空间声明,如果你写成std::assert反而是错的。使用assert需要包含cassert或assert.h,用法如下:assert(expr)assert主要用途是:用于调试,检测一些不应该出现的情况。如果expr为假(即为0),assert输出信息并终止程序的运行,如果expr为真,则什么也做。asse原创 2015-07-26 23:47:20 · 3260 阅读 · 0 评论 -
函数的指针
定义 函数指针是指指向函数而非指向对象的指针。像其他指针一样,函数指针也指向某个特定的类型(特定的函数类型)。函数类型由其返回类型以及形参表确定,而与函数名无关。如下声明了一个函数指针: bool (*pFunc)(int, double); 这个语句将pFunc声明为指向函数的指针,它所指向的函数带有两个类型分别为int和double的形参及一个 bool 类型的返回值。 说明:*pFun原创 2014-11-02 15:23:32 · 4729 阅读 · 0 评论 -
C++的三种访问权限与三种继承方式
三种访问权限我们知道C++中的类,有三种访问权限(也称作访问控制),它们分别是public、protected、private。要理解它们其实也很容易,看下面了一个例子。 父类:class Person{public: Person(const string& name, int age) : m_name(name), m_age(age) { } void S原创 2015-07-19 11:10:18 · 24523 阅读 · 5 评论 -
C++笔试题
今天又面试了两家公司,现在把笔试的几个题目总结一下,一来是自我总结和学习,二来是将笔试的题目与大家分享一下,说不定下一个你就遇到了同样的问题。两道机试题: 2.完成下面的函数,将一个八进制的数(字符串表示)转化成十进制的数,如“100”返回的结果是64要求不使用库函数。(北京轩宇信息技术)int convert(char *str); int conv原创 2014-04-12 11:09:52 · 2629 阅读 · 2 评论 -
“DWORD”: 重定义;不同的基类型
在写设备相关的代码时,定义了这样一个枚举enum DEVICE_TYPE{DEVICE_NONE = 0,DEVICE_SPEAKER = 1,DEVICE_MICROPHONE_ = 2,DEVICE_CAMERA_ = 3};这个再正常不过了,但编译时却报了一个莫名其妙的错误: error C2371: “DWORD”: 重定义;不同的基类型真是找了半天才找着原因,你都不知道原转载 2017-10-17 21:51:23 · 7773 阅读 · 2 评论 -
C++获取系统当前时间(精确到微秒)
获取系统当前时间在调试、日志输出、代码优化时,我们常常需要获得系统的时间。在一些性能要求高的代码优化时,对时间的精确度还比较高。在网上找不高质量的代码,便自己研究了一下,代码如下(能满足跨平台的要求,单位精确到微秒)原创 2016-05-05 19:02:10 · 33516 阅读 · 3 评论 -
C++“隐藏实现,开放接口”的实现方案
为什么要有接口?接口就是一个程序与其它程序交流的窗口。就比如有一个电视机,我并不需要知道它是怎样工作的,我只要知道按电源键就可以开启电视,按节目加(+)减(-)可以切换电视频道就可以了。Java程序员都知道Java中有interface可以实现对外的接口,但C++并没有接口这样的语法,那它要好怎样实现对外提供接口呢?我们可以通过纯虚函数定义一个抽象类,专门用来声明一个类的功能。我们完成了一个程序模块原创 2015-07-24 00:10:52 · 9278 阅读 · 6 评论 -
带你玩转Visual Studio——VS2010断点进不去解决方法
按F9断点变灰,Debug调试时进不去断点,提示:The breakpoint will not currently be hit. The source code is different from original version. 大概的意思是说当前的代码与执行文件对应版本的代码不同,这就需要重新编译代码。解决方案:1.rebuild工程。2.在工程的代码文件(.cpp或.h)适当的位置,敲原创 2015-01-20 19:04:17 · 22773 阅读 · 4 评论 -
带你玩转Visual Studio——incremental linking(增量链接)的作用
今天编译一个C++程序时,报了一个奇怪的错误(之前是好好的):1>LINK : fatal error LNK1123: failure during conversion to COFF: file invalid or corruptGoogle上搜了一下解决方案:把Project Properties -> Configuration Properties -> Linker (Gener原创 2015-11-14 00:23:50 · 10494 阅读 · 3 评论 -
带你玩转Visual Studio——带你理解多字节编码与Unicode码
上一篇文章带你玩转Visual Studio——带你跳出坑爹的Runtime Library坑帮我们理解了Windows中的各种类型C/C++运行时库及它的来龙去脉,这是C++开发中特别容易误入歧途的一个地方,我们对它进行了总结和归纳。本篇文章我们将继续讲解C++开发中容易混淆的另一个概念——多字节字符集与Unicode字符集。多字节字符与宽字节字符char与wchar_t我们知道C++基本数据类型原创 2015-10-25 22:55:33 · 42362 阅读 · 18 评论 -
C++读取注册表
昨天受一朋友要求,帮忙写一个用C++读取注册表的程序。这个朋友是搞Java的,肯定不知道C++怎么写啦!他的需求也奇怪:用js调用一个浏览器插件,通过插件获取注册表中指定键的值,插件肯定是用C++写了。于是乎我就在网上查了一下“C++读取注册表”,一搜一大片但都是一些初学C++的人写的,多数不能用,而且那写的程序真是无力吐槽……一怒之下我就自己花一个小时写了一个,费话不说了,直接上代码:C++读取注原创 2015-07-31 21:32:36 · 16337 阅读 · 11 评论 -
C++中类的多继承
在写这一主题的文章之前,在网上找到一篇很非常好的文章C++之继承与多态。就没有必要做重复造轮子的事件了,那就从这篇文章开始吧!在c++中一个类可以从多个基类中派生(即可以有多个父类),这就是多继承。多继承的方式主要有两种:1. 简单版本 类C会同时拥有类A和类B的特性(属性和方法,也就是两个类的所有成员)。这种方式很简单这里就不多说,主要讲下面这种方式。2. 复杂版本 同样的,这个结构中原创 2015-07-19 23:07:43 · 39123 阅读 · 4 评论 -
C++中的命名空间namespace
在一个企业级的开发中,一个工程往往会很大,定义的类和方法也会特别多,而且还会引入很多的第三方库,这就不可避免的会有一些同名的冲突问题。在Java中有包(Package)的概念,也就是将不同功能的类分成不同的包,来解决名称的冲突,C++中是用命名空间来解决这种冲突的。 什么是命名冲突假设你的程序中有一个第三方库ThirdLib.lib,里面有一个全局的函数 void HelloWorld();你又原创 2015-03-09 00:03:53 · 4311 阅读 · 1 评论 -
boost——入门指南
boost库是一个开源免费的第三方库,它是一个非常优秀的库,是C++标准的最好实践之一,因此也经常被用于商业的开发。所以,如果你是搞C++的,还没有听过或用过boost,你就out了,想想自己是不是跟不上技术的步伐了,哈哈……原创 2015-01-18 11:21:51 · 21750 阅读 · 2 评论 -
Makefile讲义(10)——更新函数库文件
使用make更新函数库文件———————————函数库文件也就是对Object文件(程序编译的中间文件)的打包文件。在Unix下,一般是由命令"ar"来完成打包工作。一、函数库文件的成员一个函数库文件由多个文件组成。你可以以如下格式指定函数库文件及其组成:archive(member)这个不是一个命令,而一个目标和依赖的定义。一般来说,这种用法基本上就是为了"ar"命令来服务的。如:foolib(转载 2014-07-27 12:28:35 · 1391 阅读 · 0 评论 -
makefile讲义(6)——条件判断
使用条件判断——————使用条件判断,可以让make根据运行时的不同情况选择不同的执行分支。条件表达式可以是比较变量的值,或是比较变量和常量的值。一、示例下面的例子,判断$(CC)变量是否“gcc”,如果是的话,则使用GNU函数编译目标。libs_for_gcc = -lgnunormal_libs =foo: $(objects)ifeq ($(CC),gcc)$(CC) -o foo $(ob转载 2014-07-27 11:46:55 · 1102 阅读 · 0 评论 -
makefile讲义(5)——使用变量
书写命令————每条规则中的命令和操作系统Shell的命令行是一致的。make会一按顺序一条一条的执行命令,每条命令的开头必须以[Tab]键开头,除非,命令是紧跟在依赖规则后面的分号后的。在命令行之间中的空格或是空行会被忽略,但是如果该空格或空行是以Tab键开头的,那么make会认为其是一个空命令。我们在UNIX下可能会使用不同的Shell,但是make的命令默认是被“/bin/sh”——UNIX转载 2014-07-27 11:46:42 · 1100 阅读 · 0 评论