c++
文章平均质量分 85
曾经去过跨越一个小时的地方
无心插柳柳成荫才是美丽,有哪种美好会来自于刻意。这一生波澜壮阔或是不惊都没问题,只愿你能够拥抱那种美丽。
展开
-
简单实现四舍五入的好方法
一、引言我们在编程过程中,总会遇到需要四舍五入的时候,那么该怎么实现这个功能呢?二、新技能Get请看下列伪代码(int)(1.4 + 0.5) == 1;(int)(1.5 + 0.5) == 2;发现了吗?我们只需要将我们计算的对象自动加上一个 0.5 的数值,根据 int 类型自带的地板除法(也就是去尾)的特性,导致我们正好实现了四舍五入的功能。是不是新技能Get了呢!原创 2017-04-10 00:19:36 · 961 阅读 · 1 评论 -
自定义数据结构想要使用 std::set 需要重载哪些操作符
一、引言最近在自己的项目中,定义了一个自定义数据结构,在使用这个数据结构的过程中,创建了许多该结构对象,想要使用 std::set 去重处理,然而此时就发生了编译错误: error C2678: 二进制“<”: 没有找到接受“const Point”类型的左操作数的运算符(或没有可接受的转换)二、探索那么这是什么原因呢?跟进编译错误的我发现,这应该就是 < 操作符未重载的问题,也就是说:原创 2017-09-20 23:59:36 · 5588 阅读 · 0 评论 -
define 语句中的 # 和 ## 的作用与区别
如题,特此记录:# 是把参数字符串化,## 是将两个参数连为一个整体。自己写了一份测试代码,两者之间的差别清晰可见:#include <iostream>#include <cstdlib>// 测试不带 # 号的效果#define NO_NUMBER_SIGN(x) x// 测试一个 # 号的效果#define SINGLE_NUMBER_SIGN(x) #x// 测试两个 # 号的效果#原创 2017-11-28 20:29:04 · 11546 阅读 · 1 评论 -
C++ Primer 5th: 顶层 const 与底层 const
一、引言最近在学习 C++ Primer 第五版的时候,又引发了探索顶层 const 和底层 const 的想法。对于像我这样的学东西半吊子的人来说,顶层 const 和底层 const 的概念就像一个死记硬背的公式,理解去记实在太过于复杂。而机缘巧合的是,正好看到了知乎上轮子哥(C++ Primer 第五版审校)的一个回答,有感而发,想要分享到自己博客中,以飨广大朋友。二、C...原创 2018-02-28 14:56:55 · 515 阅读 · 8 评论 -
Visual Studio Code 写 C++ 代码如何禁用编辑错误提示
一、引言最近在学习 C++ Primer 第五版的时候,想要使用 Visual Studio Code 来随书敲一些代码片段。但是很“可恶”的是,默认的 Visual Studio Code 会显示编辑错误提示,比如下图所示:对于我这样的强迫症来说,不能忍!不能忍!坚决不能忍 : (那么,怎么去掉编辑区域中默认的编辑错误提示呢?二、问题解决1. 我们打开文件菜单,点击 首选项,点击设置,进入 set原创 2018-02-28 18:03:33 · 18152 阅读 · 7 评论 -
C++ Primer 5th: 拷贝构造函数为什么可以访问传入对象的私有变量
一、引言在学习《C++ Primer》第五版第 453 页的时候,在面对这段代码的时候:class HasPtr {public: HasPtr(const std::string &s = std::string): ps(new std::string(s)), i(0) { } HasPtr(const HasPtr &p): ps(new原创 2018-03-01 19:53:01 · 958 阅读 · 1 评论 -
让我们一步一步实现一个完整的 String 类:构造、拷贝、赋值、移动和析构
一、引言我们在面试 C++ 相关岗位的时候,总会遇到这样的笔试面试题: 请你实现一个 String 类这道题,说简单也简单,说难也难,是一个考察 C++ 基础的非常好的题目。正好在今天,我萌生了一个想法,那就是一步一步,一点一点,从构造析构,到拷贝赋值,再到 C++11 的移动,我们都给这个 String 类加进去,让我们看看,这将是一个怎样的类 :)让我们先写下这么一段代码...原创 2018-03-30 10:47:30 · 8775 阅读 · 8 评论 -
探索一道面试题的多个解法:C++11 求从 1 到 10 的阶乘相加的结果
一、引言最近,有个朋友出去面试(才毕业不到一年),里面有一道很简单的笔试题: 请你编写代码,求 1 到 10 的阶乘相加的结果这是一道非常简单的题目,我们稍微动一动头脑,就能拿出下面的代码:#include <iostream>#include <cstdlib>int factorial(int n){ if (n == 1) r...原创 2018-04-06 20:27:44 · 5271 阅读 · 0 评论 -
离线安装 Visual Studio 2017: 如何选择自己想要的组件离线包下载
一、引言最近在工作中遇到了这么一个问题: 我想要在工作机中离线安装 Visual Studio 2017,但是网上的教程大多都是教你如何下载全部离线包的,如果我想要指定下载与 C++ 有关的组件,该如何下载呢?这个问题在 Visual Studio 的官方文档中有所记载,但是流传于中文社区的大多都只介绍了全部组件离线下载的方式,没有介绍选择指定组件的方法,这里我参考 Visual...原创 2018-07-18 13:22:03 · 24353 阅读 · 5 评论 -
细谈 C++ 零参数初始化对象三种风格:()、{} 和不加括号
一、引言想必只要接触了 C++ 一段时间的开发者,一定会对于这么三种 C++ 零参数初始化对象的风格有所迷惑:IntCell *m;// 第 1 种风格:后面加小括号m = new IntCell();// 第 2 种风格:后面加大括号m = new IntCell{};// 第 3 种风格:后面什么也不加m = new IntCell;我可以很明确的告诉你,在零参数初始...原创 2018-10-23 17:13:46 · 4942 阅读 · 0 评论 -
细谈 C++ 传参的四种方式:按值传参、按左值引用传参、按常量引用传参以及按右值引用传参
一、引言一直以来,我对于 C++ 的传参方式只有皮毛上的了解而没有深入其里的探讨。正好,最近在学习《Data Stuctures And Algorithms Analysis In Cpp 4th Edition》这本书的时候,看到作者介绍 C++ 及其 C++11 的传值调用的四种方式的时候,顿觉恍然大悟,有种想要整理一下分享给广大网友的冲动,因此写下了这篇博客。在这篇博客里,我会像作者那...原创 2018-10-26 10:47:21 · 13060 阅读 · 9 评论 -
细谈 C++ 返回传值的三种方式:按值返回、按常量引用返回以及按引用返回
一、引言停滞了很久,最近又开始细细品味起《Data Structure And Algorithm Analysis In C++》这本书了。这本书的第一章即为非常好的 C++11 统领介绍的教材范文,可能对于 C++11 新手来说,作者这样短篇幅的介绍或许有些苍白晦涩,但是对于我这种有一定 C++ 开发经验并且有研读过 《C++ Primer 5th》的人来说,作者这几页简直就是让我对 C++...原创 2018-11-15 13:18:24 · 13541 阅读 · 7 评论 -
细谈 C++ 类模板的分离式编译:类模板究竟要不要接口与实现分离
一、引言只要是接触了 C++ 有一定时间的程序员,都会记住这么一个不成文的规定:类模板的声明与实现最好放在同一个头文件中这或许是来源于某次错误尝试的下意识的修改,又或许是简单搜索了下 C++ 类模板编译报错的原因,看到了满篇的诸如 “为什么 C++ 编译器不能支持对模板的分离式编译” 的博客,久而久之,就留下了这么一个印象。那么实际上,如果你简单的记为 “C++ 编译器是不支持对模板的...原创 2018-11-30 15:39:31 · 9741 阅读 · 4 评论 -
独家解读:简单又强大的配置文件 Config 读写类
一、引言在项目过程中,难免会需要一个方便的配置文件读写类,它可以像游戏的存档文件一样,记录着我们当前项目的配置信息,以至于方便我们每次初始化运行的时候可以从这个配置文件读取上一次的配置信息,当然也可以在程序运行过程中记录用户的配置设置信息。我们理想中的这个配置文件读写类,它要有以下这些方法:1. 支持读入一个指定配置文件的能力2. 支持随时加入一个配置项的能力3. 足够强大,能够写入各种数据结构的配原创 2017-09-14 11:10:38 · 23434 阅读 · 5 评论 -
C++之父谈为何不加入垃圾回收机制
一、C++之争议关于 C++ 为何不加入垃圾回收机制的争论一直都在进行。这里我才疏学浅,不敢妄言,直接粘贴出 《C++语言的设计和演化》的作者原文。二、C++之父所说这里翻到了《C++语言的设计和演化》的英文原版语录,在书籍的第 60 页(英文原版): The possibility of automatic garbage collection was considered on server转载 2017-08-17 10:28:56 · 417 阅读 · 0 评论 -
<cstdlib> 和 <stdlib.h> 的区别
一、引言最近在学习C++语言,经常发现有 #include <cstdlib> 的 ,也有 #include <stdlib.h> 的。那么这两者到底有什么区别呢?这两者又该选择哪种书写更好呢?二、查看百度百科这里转载一位网友的回复: C语言中是有 #include <stdlib.h>的。 这是C语言标准的包含库头文件stdlib.h的语句。在代码中引用此句后,就可以使用stdlib.h中的函转载 2017-04-11 09:47:02 · 11418 阅读 · 0 评论 -
获取并编译最新的Notepad++源码
一、引言我们在写代码的时候,最喜欢使用一些代码编辑器来编写一些轻型的代码文件,这里比较经典而且用户很多的就是Notepad++了。Notepad++是一款非常简洁轻巧功能非常强大的开源软件,那么只要有一点点开源精神的、并且想要见识下C++11代码风格的程序员,必然就会有想要拿到Notepad++的源码并进行编译的想法,这里我当然也不除外。 基于好奇心害死猫的想法,我开始了Notepad++的源码获原创 2017-04-01 19:08:35 · 13014 阅读 · 11 评论 -
变量定义的两种风格:*跟随变量类型标识符还是变量标识符
引言:公司项目中有两种风格混杂在《C++ Primer 5th》上面看到的书的变量定义风格是 * 与变量标识符写在一起,而公司的项目呢,则是 * 与类型标识符写在一起。尽管是个很小的问题,但是作为代码强迫症的我还是很在意,究竟哪种方式更好呢?变量定义的两种风格:*跟随变量类型标识符还是变量标识符最近重新翻看《C++ Primer 5th》,发现在书的第52页中已经有过描述了,这里引用书上原文:原创 2017-03-27 11:49:16 · 1961 阅读 · 0 评论 -
VS编写C、C++程序一闪而过的解决办法
最近正在第二遍看《C++ Primer 5th》这本书,第一遍没有怎么敲代码,第二遍想跟着习题敲过去。想着该怎么用VS这宇宙第一IDE调试最纯净的C++程序呢?方法一:使用Sleep()函数此函数需要添加头文件Sleep(1000); // 1000毫秒也就是1秒方法二:使用System(“pause”)函数此函数需要添加头文件System("pause"); // 点击任意键才退出程序总结以原创 2017-03-16 21:16:50 · 10834 阅读 · 0 评论 -
C++11 封装小觑:从 std::array 看 C++11 风格
一、引言最近也正在第二次刷《C++ Primer 5th》这本书,为什么要第二次刷呢?是因为自己仍然写不出自己满意的 C++11 风格的代码。那么这个有点“玄乎其玄”的 C++11 风格到底是什么呢?这是一个很大的话题,这里不予而且我也没有能力去阐述,我只能以我自己看到的一点点小细节来揣测大神们在设计 C++11 的一点点想法。二、C++11 为什么要设计一个 std::array?我们打开 C++原创 2017-04-19 17:43:04 · 695 阅读 · 0 评论 -
C/C++如何实现随机数
一、引言学习 C 语言已经很久了,工作之后便投入了 C++ 的怀抱。一直也没有遇到过随机数的问题,最近工作刚好遇到了,这里也好奇了下,C 语言有 rand 函数来实现随机数,那么 C++ 呢?二、C++并未对随机数作专门的处理通过翻阅了 C++ 在线手册,我很遗憾的发现,C++ 并未对随机数的相关函数进行专门的封装,而是直接调用了 <cstdlib> 头文件作为对于 C 语言的兼容。那么其实在这里,原创 2017-05-04 17:44:30 · 9078 阅读 · 0 评论 -
XmlParser: 简易的 Xml 解析器的实现(一)
一、引言工作中接触到 xml 的机会比较多,比如使用 xml 文件来配置界面显示。于是,也就慢慢萌生了想要自己去实现一个简易的 xml 解析器的想法。首先,让我们看看 xml 配置文件都长什么样子,这是来自 W3school 的示例 xml 代码:<note><to>George</to><from>John</from><heading>Reminder</heading><body>Do原创 2017-06-29 19:57:08 · 10351 阅读 · 3 评论 -
XmlParser: 简易的 Xml 解析器的实现(二)
一、引言在上一篇博客里,我主要架构了一个 xml 解析器的三大模块,分别是读取模块、解析模块、获取数据模块,并在尽快实现整体架构的目标下,实现了一个非常简略的 xml 解析器。想要了解 xml 解析器的设计流程的同学可以点击这里 XmlParser: 简易的 Xml 解析器的实现(一)。在这一篇博客中,我将填上上一篇博客里面的坑,将读取模块里面的 xml 代码的合法性检查和解析模块里面的对于嵌套元素原创 2017-06-30 14:18:29 · 9196 阅读 · 1 评论 -
朋友的问题:字符串逆置
一、引言今天收到了同学发来的一道题,叫我用 C++ 实现:Problem StatementThe input is an English sentence as a string, we need a function - “function convert($input)” that can transform it as described below and return a new str原创 2017-06-21 19:24:28 · 881 阅读 · 0 评论 -
XmlParser: 简易的 Xml 解析器的实现(三)
一、引言在前面的章节里面,我完成了一个麻雀虽小但是五脏俱全的 Xml 解析库(额,也就一个类三个数据结构,叫作库真有些脸红 T_T)。那么我们那么辛苦地造出来了的轮子,不用来跑跑怎么行呢?这里我使用了 SOUI 界面库,使用了 Scintilla 开源代码编辑组件,写出来了一个简略的 xml 解析软件。这个软件的效果图是这样的:想要了解前面两章的同学可以点击这里:XmlParser: 简易的 Xml原创 2017-07-01 16:54:17 · 1690 阅读 · 0 评论 -
C++简单实现回调机制
一、引言在 C++ 开发过程中,经常会遇到需要一个类在遇到某种情况下(比如触发了一个行为等等)需要驱使另一类去做某些行为的需求(也就是回调机制)。那么这个需求该如何实现呢?这里我根据自己的经验,总结了一个巧妙又简单的使用多态的方法。以下结合一个简单的例子,尽量将这个方法清晰的表达出来。二、Demo:A 和 B 的寒暄程序这里我们假定一个需求: 现在有两个人,一位是 A 先生,另一位是 B 先生。原创 2017-06-15 17:42:38 · 1557 阅读 · 0 评论 -
精通 C++ 有多难
Question: On a scale from 1 to 10, how do you rate your understanding of C++?Bjarne Stroustrup:7By “Deep C and C++” Olve Maudal Jon JaggerPs: Bjarne Stroustrup C++ 之父转载 2017-08-16 14:39:38 · 3773 阅读 · 0 评论 -
Concurrecy vs. Parallelism:C++ Concurrency In Action 2nd 的作者与众不同的观点
一、引言最近在学习《C++ Concurrency In Action 2nd》这本书,作者在本书一开头使用了大量的篇幅举了一个例子:想象有一个场景,在一家 IT 公司里,有两个程序员分为 A 和 B。会有这么两种工作的分配情况:A 和 B 分别拥有一个办公室,有自己的参考手册。他们自己单独工作,交流通过电话、邮件,或者直接步行到另一个程序员的办公室里A 和 B 同时在一个办公室,只有...原创 2019-09-27 16:21:48 · 412 阅读 · 0 评论