最近在讨论多线程编程中的一个可能的 false sharing 问题时,有人提出加 volatile 可能可以解决问题。这种错误的认识荼毒多年,促使我写下这篇文章。
学习优先队列之前先看个单词队列 queue, 这个单词的读法很多人都能读对吧,音标是 /kjuː/ ,再看一个双端队列 deque,它的音标是 /dek/,应该有人读错了吧,反正我是没读对,刚开始看见一次错一次,现在还好了,基本能记住怎么读了,可是这些队列怎么用呢?
RAII是Resource Acquisition Is Initialization(翻译成 “资源获取即初始化”)的简称,是C++语言的一种管理资源、避免资源泄漏的惯用法,该方法依赖构造函数资和析构函数的执行机制。
Lambda函数是 Modern C++在C++11中的一个体现,虽然在网络上已经有很多关于lambda函数的讨论或者教学,但是仍然有一部分内容(例如IIFE,lambda类型等)没人谈论。因此在这里,我不仅要向您展示C++中的lambda函数,而且还将介绍Lambda的工作原理以及发展。
C++中存在两个比较难理解的操作std::move和std::forward。
C++中的虚函数的作用主要是实现了多态的机制。关于多态,简而言之就是用父类型别的指针指向其子类的实例,然后通过父类的指针调用实际子类的成员函数。这种技术可以让父类的指针有“多种形态”,这是一种泛型技术。
在我们日常编码中会发现有些功能代码,会不断的在不同的成员函数中用到,但是又不好将这些代码独立成一个成员函数。解决办法之一就是写一个公共的函数,不过函数用到的一些变量,就可能会成为全局变量。再说为了复用这么一段代码,就要单立出一个函数,也不是很好维护。此时就可以用到仿函数了。
这篇文章介绍了如何在最常见的编码方式(Unicode,UTF-8,ANSI)之间进行转换,结合代码实例,清晰明了,方便读者理解,例子也可以直接拿来使用。本文推荐给经常对文字字符串进行处理的程序员阅读,使其掌握字符转换的一些基本方法。
程序员常常需要和指针打交道。有时候,对一个空指针解引用,或者访问到野指针等,都会造成程序的崩溃。崩溃有时或许还好排查,如果只是访问到脏数据,但程序运行稳定,那排查起来就麻烦了,在C++11中,引入了智能指针的概念,能更加方便的管理堆内存。本文主要介绍C++11智能指针的原理,使用和简单实现。
C++20 最新进展:加入模块化和协程,进入特性冻结阶段。
在C语言中,我们常常用NULL作为指针变量的初始值,而在C++中,却不建议你这么做。
在C语言中typedef用来给复杂声明定义别名非常的方便,不过有时候typedef在复杂声明中不好理解。本文关键的一句话帮你理解typedef的用法。
如何在C++代码中调用写好的C接口?你可能会奇怪,C++不是兼容C吗?直接调用不就可以了?这里我们先按下不表,先看看C++如何调用C代码接口。
上周五排查了一个由于XXX模块操作疏忽导致栈越界引发的我的模块的智能指针Crash问题,因此稍微研究了一下,以作参考:
C++11中将表达式的值类型划分成了lvalue(左值)、rvalue(右值)、prvalue(纯右值)、xvalue(将亡值)、gvalue(泛左值) 5种。
记得我还在C语言里摸爬滚打的时候,对字符串的处理一直有种莫名的恐惧,这里指针偏移错了,那里字符串拷贝越界等等。学习了C++string类以后,发现原来字符串处理可以这么简单。那么本文会带领大家回顾一下string类的相关操作,查缺补漏。
本文将介绍最新标准中值得开发者关注的新特新和基本用法。