C loves CPP
文章平均质量分 56
dblinux
DBL && XLB
展开
-
【干货】VS2017简介、编译、启动单项目和启动多项目
VS2017简介,编译,启动单项目和多项目原创 2023-10-14 00:10:48 · 606 阅读 · 0 评论 -
虚函数与多态
虚函数与多态1. 定义虚函数的作用是为了实现多态的机制。多态:用父类型别的指针指向其子类的实例,然后通过父类的指针调用实际子类的成员函数。这样可以实现“多种形态”,这是一种泛型技术。2. 虚函数表每个含有虚函数的类都有一个虚函数表(Virtual Table),C++编译器应该保证虚函数表的指针存在于对象实例中最前面的位置(这是为了保证取到虚函数表的有最高的性能—–如果有多重继承情况)。这就意味着我们通过对象实例的地址得到这张虚函数表,然后就可以遍历其中函数指针,并调用相应函数。每一个类都有一原创 2021-06-23 23:16:36 · 125 阅读 · 0 评论 -
编译过程(新手向)
编译过程1. 编译器介绍GCC(GNU Compiler Collection)是GNU的编译器集合,它可以编译C、C++、JAVA、Fortran等语言。gcc是GCC中的C编译器;g++是GCC中的C++编译器。gcc与g++的主要区别:编译和链接阶段有所不同。对于 *.c 和 *.cpp文件,g++统一当做cpp文件编译;gcc则分别当做c和cpp文件编译;使用g++编译时,g++会自动链接标准库STL;gcc则不会自动链接STL,如果想要链接的话,则需要加上参数 -lstdc++g原创 2021-06-21 08:56:27 · 179 阅读 · 0 评论 -
使用静态局部变量实现单例模式
大名鼎鼎的Scott Meyer在《Effective C++》中提出了一种简洁的singleton写法:原理:在C++11之前的标准中并没有规定local static变量的内存模型。于是乎它就是不是线程安全的了。但是在C++11却是线程安全的,这是因为新的C++标准规定了当一个线程正在初始化一个变量的时候,其他线程必须得等到该初始化完成以后才能访问它。封装之后的测试代码如下:#include <iostream>using namespace std;class Singleto原创 2021-05-08 19:33:13 · 1540 阅读 · 3 评论 -
C++ lambda表达式初探
1. 定义lambda函数是C++11中的匿名函数,又叫做lambda表达式,称为表达式更加符合,因为函数是不可以在函数之间定义的。lambda表达式可以简化编程工作,有些只是临时使用一下,没必要将其定义成为一个函数,所以使用临时的匿名函数,可以减少函数的数量并简化代码量。2. lambda的表现形式最简单的形式,无形参[捕获外部变量列表] {函数体}捕获外部变量相当于,函数体里可以直接使用可见范围之内的变量。当有形参,需要在[ ]之后加上( 参数列表 )[捕获外部变量列表] (原创 2021-04-11 20:26:13 · 126 阅读 · 0 评论 -
类的内存模型(二)
类的内存模型(二)1. 单继承关系的对象模型单继承代码如下:class Base{ private: int m_Ba; int m_Bb; public: virtual void test();};class Derived : public Base { private: int m_Da; public: virtual void test(); virtual void print();};对于基类,和之前简单的对象不一样,该对象的内存空间不仅存储非原创 2020-11-22 22:40:26 · 146 阅读 · 0 评论 -
类的内存模型(一)
类的内存模型(一)1. 用VS查看内存模型工具:VS 201*的开发人员命令提示符。具体位置和形式如下使用方法:形式: cl /d1reportSingleClassLayout[classname] [filename].cpp举例1首先编写代码VS默认4字节对齐。class Test{ private: static int s_a; //静态变量区 int m_a; //4字节 char m_b; //1字节,但由于对齐,需要补3个字节 d原创 2020-11-22 22:36:16 · 348 阅读 · 0 评论 -
C++线程与原生线程
C++线程与原生线程Intro:写本文时,笔者正被C++线程与Linux原生线程所困扰,本文通过简单比较其原理和基本概念,可以帮助读者梳理二者区别。1. posix thread介绍POSIX表示可移植操作系统接口(Portable Operating System Interface of UNIX,缩写为 POSIX ),POSIX标准意在期望获得源代码级别的软件可移植性。换句话说,为一个POSIX兼容的操作系统编写的程序,应该可以在任何其它的POSIX操作系统(即使是来自另一个厂商)上编译执行原创 2020-11-10 14:27:25 · 893 阅读 · 1 评论 -
C++の传值、传址与传引用[ 入门 ]
传值、传址与传引用知识概述1. 概念值传递:形参是实参的拷贝,改变形参的值并不会改变实参的值,从被调函数角度来看,值传递是单向的(实参->形参)。 在被调函数结束之后,形参自动销毁,并不会传到主调函数中。传址:形参是指向实参的指针,当对形参进行改动时,就相当于对实参进行改动。将实参地址传给形参,注意,这时形参指针和实参指针指向同一块地址。因此,改变形参就会修改实参。传引用:形参是实参的“别名”,对形参的改动也就是对实参的改动。这时候,形参与实参使用相同的内存空间,二者的地址完全一样。2原创 2020-10-01 14:12:08 · 209 阅读 · 0 评论