c++语法进阶
文章平均质量分 84
分享一些c++高级使用方法,进阶语法等。
cpp加油站
公众号:cpp加油站,专注分享linux下cpp知识
展开
-
c++11增加的变参数模板,今天总算整明白了
本篇文章介绍一下c++11中增加的变参数模板template<typename... _Args>到底是咋回事,以及它的具体用法。说明一下,我用的是gcc7.1.0编译器,标准库源代码也是这个版本的。按照惯例,还是先看一下本文大纲,如下:在之前写vector和deque容器源码剖析的过程中,经常发现这样的代码,如下:template<typename... _Args>void emplace_front(_Args&&... __args);可以原创 2021-07-29 09:43:47 · 1428 阅读 · 5 评论 -
【工欲善其事,必先利其器】之gdb五大高级用法
本篇文章讲解gdb的一些高级用法,在我们的开发生涯中,调试是很重要的技能,而在linux下开发,最常用的调试工具就是gdb了,所以这里介绍几种gdb比较高级的用法,助力我们的调试技能。还是先看下思维导图:1. gdb怎么调试多线程gdb调试多线程时,默认情况下是所有线程同时都在执行,但是假设我们想只有一个线程继续执行,其他线程都暂停呢?下面就来看一看该怎么实现这个功能。有这么一段多线程代码,如下://test.cpp#include <stdio.h>#include <p原创 2021-07-06 10:25:48 · 907 阅读 · 15 评论 -
c++中引用面试点7连问以及引用真的不分配内存吗
本篇文章从面试官的口吻连问7个引用有关的问题,并且从汇编的层面上对引用进行深入分析,让你充分理解引用的概念和原理。首先还是看一下思维导图:1. 引用的背景和概念说到引用,首先要说一下’&'标识符,其实c语言中这个符号只是用来取地址的,并没有引用的概念,直到c++对这个标识符的作用进行了扩充,才有了引用这个概念。所谓引用,其实就是给变量取了一个别名,一个简单的例子如下:int main(){ int a = 2; int &b = a; return 0;}对于这段c原创 2021-06-28 09:25:36 · 1364 阅读 · 19 评论 -
c++类和继承面试点25连问
本篇文章连问面试时经常会遇到的类和继承相关25个问题,看看你能回答出几道题呀。还是先看一下思维导图,如下:1. c++的三大特性是什么c++的三大特性,说白了其实就是面向对象的三大特性,是指:封装、继承、多态,简单说明如下:封装是一种技术,它使类的定义和实现分离,也就是隐藏了实现细节,只留下接口给他人调用,另外封装还有一层意义是它把某种事物具现出属性和方法并形成了一个整体,就像一个人,同时具有身高和身体等等这些,才是完整的人,如果不封装,那这个人就相当于四分五裂了;继承,所谓继承,其实就是真实原创 2021-06-18 19:43:10 · 272 阅读 · 5 评论 -
c++头脑风暴-多态、虚继承、多重继承内存布局
本篇文章深入分析多态、虚继承、多重继承的内存布局以及实现原理。首先还是看一下思维导图:下面根据这个大纲一步一步的进行深入解析。一、没有虚函数时内存布局是怎样的1. 没有虚函数时类的内存布局一个类没有虚函数的时候,其实就是结构体,它的内存布局就是按照成员变量的顺序来的。看如下代码:#include <iostream>using namespace std;class CPeople{ double height; int age; char sex;public:原创 2021-06-17 09:13:55 · 444 阅读 · 0 评论 -
c++中typename、typedef以及using关键字用法
在c++的标准库中,因为类继承关系比较复杂和模板使用比较多的原因,源代码中充斥着typename、typedef和using这三个关键字,所以在继续剖析标准库源码之前,今天就来介绍一下这三个关键字的作用。一、typename关键字typename的第一个作用是用作模板里面,来声明某种类型,比如这样的:template<typename _Tp, typename _Alloc> struct _Vector_base;最开始的时候声明模板形参,也会使用class,但我们都知道c原创 2021-06-03 09:18:23 · 2146 阅读 · 4 评论 -
c++编码规范
我的c++编码规范:属性 规则 例子 全局常量类应用(枚举、宏) 全大写英文单词组合用下划线分隔 DATA_SIZE 函数命名 第一个单词首字母小写,后面全部首字母大写(或者全部首字母大写,看整体吧) initData()/InitData() 类名 C开头,后面全部首字母大写 CTestObject 接口名 I开头,也是全部首字母大写 ITestObject 类的成员变量 m_开头,首字母大写英文单词组合 m_原创 2021-05-21 12:35:49 · 138 阅读 · 0 评论 -
c++中lambda表达式用法
说明一下,我用的是gcc7.1.0编译器,标准库源代码也是这个版本的。本篇文章讲解c++11中lambda表达式用法。初次接触lambda这个关键字,记得还是在python里面,但其实,早在2011年c++11推出来的时候我们c++就有了这个关键字啦。lambda表达式是C++11中引入的一项新技术,利用lambda表达式可以编写内嵌的匿名函数,用以替换独立函数或者函数对象,并且使代码更可读。所谓函数对象,其实就是对operator()进行重载进而产生的一种行为,比如,我们可以在类中,重载函数调用.原创 2021-05-20 10:02:35 · 1789 阅读 · 1 评论