
编程语言系列 -- C/C++
C/C++ 开发基础与进阶系列专栏
奋斗企鹅CopperSun
这个作者很懒,什么都没留下…
展开
-
【C/C++基础进阶系列】C/C++基础进阶书单
【C/C++基础进阶系列】C/C++基础进阶书单【1】C基础书单【1.1】C程序设计语言 第2版【2】LinuxC书单【2.1】Linux程序设计【2.2】Linux/UNIX系统编程手册(上、下册)【3】C++基础书单【3.1】C++基础书单 -- C++新经典【3.2】C++基础书单 -- C++ Primer【4】C++进阶书单【4.1】C++新经典:对象模型【4.2】深度探索C++对象模型【4.3】C++ Templates原创 2020-09-25 17:30:21 · 442 阅读 · 0 评论 -
【C/C++基础进阶系列】C/C++ 常见知识点总结
【C/C++基础进阶系列】C/C++ 常见知识点总结目录【C/C++基础进阶系列】C/C++ 常见知识点总结【1】offsetof 宏【2】char *s 和 char s[] 的区别【3】左值和右值【4】C++ 聚合类【5】reinterpret_cast const_cast static_cast 和 dynamic_cast【6】const与constexpr关键字【7】noexcept关键字【8】explicit 关键字【1】offsetof 宏#原创 2021-02-04 15:36:26 · 486 阅读 · 0 评论 -
【C/C++基础进阶系列】C/C++ 基础知识 -- 内存模型简介与内存问题
【C/C++基础进阶系列】C/C++ 基础知识 -- 内存模型简介与内存问题【1】C/C++ 内存模型C/C++ 内存模型图示C/C++ 编译的程序占用的内存分为以下几个部分1、栈区 (stack),由编译器自动分配释放,存放函数的参数值,局部变量的值等,其操作方式先入先出 (FILO) 2、堆区 (heap),由程序员分配释放,若程序员不释放,程序结束时可能由 OS 回收 3、数据区,主要包括静态全局区和常量区 全局区(静态区)(static),全局变量和静态变量的存储是放在一块原创 2021-08-01 20:52:53 · 671 阅读 · 0 评论 -
【C/C++基础进阶系列】C/C++ 基础知识 -- C++ 面向过程新特性与关键知识点总结(一)
【C/C++基础进阶系列】C/C++ 基础知识 -- C++ 面向过程新特性【1】空指针 nullptr【2】初始化【3】新式 for【4】函数新特性【5】类型转换参考致谢本博客为博主学习笔记,同时参考了网上众博主的博文以及相关专业书籍,在此表示感谢,本文若存在不足之处,请批评指正。【1】C++ 新经典【2】C++11/14 高级编程 Boost 程序库探秘...原创 2021-03-22 16:38:44 · 311 阅读 · 0 评论 -
【C/C++基础进阶系列】C/C++ 基础知识 -- C++ 面向过程新特性与关键知识点总结(二)
【C/C++基础进阶系列】C/C++ 基础知识 -- 函数式编程【1】函数调用运算符与 function 类模板【2】可调用对象【3】lambda 表达式参考致谢本博客为博主学习笔记,同时参考了网上众博主的博文以及相关专业书籍,在此表示感谢,本文若存在不足之处,请批评指正。【1】C++ 新经典【2】C++11/14 高级编程 Boost 程序库探秘...原创 2021-03-22 16:39:06 · 189 阅读 · 0 评论 -
【C/C++基础进阶系列】C/C++ 对象模型 -- 类基础知识总结(一)
【C/C++基础进阶系列】C/C++ 基础知识 -- 类基础知识总结【1】类基础知识点【2】类的构造与析构【2.1】类构造函数、explicit 与初始化列表【2.2】类内初始化、默认构造函数【2.3】拷贝构造函数、拷贝赋值运算符【2.4】析构函数【3】类调用【3.1】子类与调用顺序【3.2】访问等级【3.3】函数遮蔽【4】父类与多态性【4.1】父类指针与子类指针【4.2】虚函数、纯虚函数、抽象类...原创 2021-03-22 16:39:24 · 208 阅读 · 4 评论 -
【C/C++基础进阶系列】C/C++ 对象模型 -- 类基础知识总结(二)
【C/C++基础进阶系列】C/C++ 对象模型 -- 对象移动、移动构造函数与移动赋值运算符参考致谢本博客为博主学习笔记,同时参考了网上众博主的博文以及相关专业书籍,在此表示感谢,本文若存在不足之处,请批评指正。【1】C++ 新经典【2】C++11/14 高级编程 Boost 程序库探秘...原创 2021-03-22 16:39:45 · 209 阅读 · 0 评论 -
【C/C++基础进阶系列】C/C++ 对象模型 -- 类基础知识总结(三)
【C/C++基础进阶系列】C/C++ 对象模型 -- 类基础知识总结(三)【1】new/delete#include <iostream>#include <vector>using namespace std;class A{public: A() { cout << "A" << endl; } int m_i;};/** * 知识点 * 1. new 一个对象实际上是在堆上分配内存 * new 出的对象原创 2021-03-22 16:40:01 · 197 阅读 · 0 评论 -
【C/C++基础进阶系列】C/C++ 对象模型 -- 对象语义
【C/C++基础进阶系列】C/C++ 对象模型 -- 对象语义【1】类对象的结构 -- 对象占用的空间#include <iostream>class A{ public:};int main(){ A a; // sizeof() : 返回一个对象所占用的字节数 int ilen = sizeof(a); // 等价于 sizeof(A), 结果为 1 printf("ilen = %d\n", ilen);原创 2021-03-22 22:02:25 · 183 阅读 · 0 评论 -
【C/C++基础进阶系列】C/C++ 对象模型 -- 对象构造语义(一)
【C/C++基础进阶系列】C/C++ 对象模型 -- 对象构造语义(一)【1】对象构造函数语义 -- 编译器生成"合成默认构造函数"#include <iostream>using namespace std;class MATX{public: MATX() //默认构造函数 { cout << "goodHAHAHA" << endl; }};class MBTX{public: int m_i; int m_j; v原创 2021-03-22 22:29:04 · 205 阅读 · 0 评论 -
【C/C++基础进阶系列】C/C++ 对象模型 -- 对象构造语义(二)
【C/C++基础进阶系列】C/C++ 对象模型 -- 对象构造语义(二)【1】对象构造函数语义 -- 编译器生成"合成拷贝构造函数"#include <iostream>using namespace std;class A{public: int m_test;};int main(){ A mya1; mya1.m_test = 15; // 这属于拷贝构造动作,但编译器没有合成拷贝构造函数 // 程序员没有书写类 A 的拷贝构造函数,编译器也没有生成原创 2021-03-23 08:38:37 · 207 阅读 · 0 评论 -
【C/C++基础进阶系列】C/C++ 对象模型 -- 对象构造语义(三)
【C/C++基础进阶系列】C/C++ 对象模型 -- 对象构造语义(三)【1】对象构造函数语义 --编译器生成"合成移动构造函数"#include <iostream>using namespace std;struct TC{ int i; //内置类型可以移动 std::string s; //string类型定义了自己的移动操作};int main(){ TC a; a.i = 100; a.s = "I Love China!".原创 2021-03-23 09:00:25 · 154 阅读 · 0 评论 -
【C/C++基础进阶系列】C/C++ 对象模型 -- 对象构造语义(四)
【C/C++基础进阶系列】C/C++ 对象模型 -- 对象构造语义(四)【1】对象构造函数语义 --局部/全局对象的构造#include <iostream>#include <time.h>using namespace std;class A{public: A() { cout << "A::A()缺省构造函数执行了" << endl; } ~A() { cout << "A::~A()析构函数执行.原创 2021-03-23 09:00:34 · 164 阅读 · 0 评论 -
【C/C++基础进阶系列】C/C++ 对象模型 -- 数据语义(一)
【C/C++基础进阶系列】C/C++ 对象模型 -- 数据语义(一)【1】对象数据语义 -- 数据成员确定的时机#include <iostream>#include <time.h>using namespace std;string myvar; // 定义全局量,字符串型//定义一个类class A{public: int myfunc() { // 返回的是类 A 的成员变量 myvar // 编译器对 myfunc 的解析原创 2021-03-25 11:23:10 · 196 阅读 · 0 评论 -
【C/C++基础进阶系列】C/C++ 对象模型 -- 数据语义(二)
【C/C++基础进阶系列】C/C++ 对象模型 -- 数据语义(二)【1】对象数据语义 -- 单一继承下的数据成员布局#include <iostream>#include <time.h>using namespace std;class FAC //父类{public: int m_fai; int m_faj;};class MYACLS : public FAC //子类{public: int m_i; int m_j;};i原创 2021-03-25 11:23:25 · 147 阅读 · 0 评论 -
【C/C++基础进阶系列】C/C++ 对象模型 -- 数据语义(三)
【C/C++基础进阶系列】C/C++ 对象模型 -- 数据语义(三)【1】对象数据语义 -- 多重继承数据布局#include <iostream>#include <time.h>using namespace std;class Base{public: int m_bi;public: Base() { printf("Base::Base()构造函数的this指针是:%p!\n", this); }};class MYACLS :原创 2021-03-25 11:23:39 · 161 阅读 · 1 评论 -
【C/C++基础进阶系列】C/C++ 对象模型 -- 函数语义(一)
【C/C++基础进阶系列】C/C++ 对象模型 -- 函数语义(一)【1】对象函数语义 -- 普通成员函数调用方式#include <iostream>#include <time.h>using namespace std;class MYACLS{public: int m_i; void myfunc(int abc) { m_i += abc; }};// 全局函数gmyfuncvoid gmyfunc(MYACLS *ptmp,原创 2021-03-25 22:59:34 · 216 阅读 · 0 评论 -
【C/C++基础进阶系列】C/C++ 对象模型 -- 函数语义(二)
【C/C++基础进阶系列】C/C++ 对象模型 -- 函数语义(二)【1】对象函数语义 -- 静动态类型与多态【1.1】动静态类型与绑定#include <iostream>#include <time.h>using namespace std;class Base{public:};class Derive : public Base{public:};class Derive2 : public Base{public:};原创 2021-03-25 23:00:52 · 172 阅读 · 0 评论 -
【C/C++基础进阶系列】C/C++ 泛型 -- 函数模板
【C/C++基础进阶系列】C/C++ 泛型 -- 函数模板参考致谢本博客为博主学习笔记,同时参考了网上众博主的博文以及相关专业书籍,在此表示感谢,本文若存在不足之处,请批评指正。【1】C++ 新经典【2】C++11/14 高级编程 Boost 程序库探秘...原创 2021-03-25 23:50:31 · 198 阅读 · 0 评论 -
【C/C++基础进阶系列】C/C++ 泛型 -- 类模板(一)
【C/C++基础进阶系列】C/C++ 泛型 -- 类模板参考致谢本博客为博主学习笔记,同时参考了网上众博主的博文以及相关专业书籍,在此表示感谢,本文若存在不足之处,请批评指正。【1】C++ 新经典【2】C++11/14 高级编程 Boost 程序库探秘...原创 2021-04-03 15:27:45 · 283 阅读 · 0 评论 -
【C/C++基础进阶系列】C/C++ 泛型 -- 类模板(二)
【C/C++基础进阶系列】C/C++ 泛型 -- 类模板(二)【1】类模板 --成员函数模板基本概念#include <iostream>using namespace std;namespace _nmsp1{ template <typename T1> class A { public: // 构造函数模板,引入了自己的模板参数T2,与类A的模板参数T1没有关系 template <typename T2> A(.原创 2021-04-03 15:35:45 · 193 阅读 · 0 评论 -
【C/C++基础进阶系列】C/C++ 泛型 -- 类模板(三)
【C/C++基础进阶系列】C/C++ 泛型 -- 类模板(三)【1】类模板 --变量模板与成员变量模板 【1.1】变量模板与成员变量模板 -- 概念#include <iostream>#include <map>using namespace std;namespace _nmsp1{ // g_myvar的泛化版本 template<typename T> T g_myvar{}; // 写成T g_myvar = 0;也不会出现.原创 2021-04-03 15:36:39 · 243 阅读 · 0 评论 -
【C/C++基础进阶系列】C/C++ 泛型 -- 类模板(四)
【C/C++基础进阶系列】C/C++ 泛型 -- 类模板(四)【1】类模板 --类模板中友元类【1.1】让类模板的某个实例成为友元类#include <iostream>using namespace std;namespace _nmsp1{ template <typename U> class B; // 类模板B的声明 // 类模板A template <typename T> class A { // 让类.原创 2021-04-03 15:38:11 · 192 阅读 · 0 评论 -
【C/C++基础进阶系列】C/C++ 泛型 -- 可变参模板
【C/C++基础进阶系列】C/C++ 泛型 -- 可变参模板【1】可变参函数模板 -- 概念#include <iostream>using namespace std;namespace _nmsp1{ // 普通的函数 void myptfunct() { } // 可变参函数模板 template <typename... T> // ...代表参数包 void myvtfunct(T... args) // T,一包类型,a原创 2021-04-03 15:46:00 · 403 阅读 · 0 评论 -
【C/C++基础进阶系列】C/C++ 泛型 -- 继承与多态
【C/C++基础进阶系列】C/C++ 泛型 -- 继承与多态【1】继承与多态 --多态在模板中的应用#include <iostream>using namespace std;namespace _nmsp1{ // 多态 // 人类 class Human { public: virtual void eat() { cout << "人类以吃米饭和面食为主!" << endl; } virtual ~Human(.原创 2021-04-03 15:47:01 · 950 阅读 · 0 评论 -
【C/C++基础进阶系列】C/C++ 泛型 -- 万能引用、模板类型推断、完美转发
【C/C++基础进阶系列】C/C++ 泛型 -- 万能引用、模板类型推断、完美转发【1】万能引用与右值引用#include <iostream>#include <vector>using namespace std;// 万能引用与右值引用相关的面试题目// 1.// void func(int&& param){...} // 右值引用,因为func不是函数模板而是一个普通函数// 2.// template <typename原创 2021-04-03 16:38:40 · 577 阅读 · 0 评论 -
【C/C++基础进阶系列】C/C++ 萃取技术
【C/C++基础进阶系列】C/C++ 萃取技术【1】萃取技术基本概念演示#include <iostream>using namespace std;namespace _nmsp1{ // 计算数组中元素的和值的函数模板 template <typename T> T funcsum(const T* begin, const T* end) { T sum{}; // 零初始化,如果数值型变量被初始化为0,指针型变量被初始化为nullptr,boo原创 2021-04-03 17:31:17 · 1253 阅读 · 0 评论 -
【C/C++基础进阶系列】C/C++ 元编程
【C/C++基础进阶系列】C/C++ 元编程【1】C/C++ 元编程 -- 元函数#include <iostream>// 只在Debug(调试)模式下#ifdef _DEBUG#ifndef DEBUG_NEW// 重新定义new运算符#define DEBUG_NEW new(_NORMAL_BLOCK,__FILE__,__LINE__)#define new DEBUG_NEW#endif#endifusing namespace std;names原创 2021-04-04 11:36:15 · 542 阅读 · 0 评论 -
【C/C++基础进阶系列】C/C++ STL -- 智能指针
【C/C++基础进阶系列】C/C++ STL -- 智能指针【1】概述裸指针,直接 new 一个对应并返回的指向该对象的指针;智能指针,封装裸指针使得可以自动释放所指向的对象,C++ 标准库中提供了 4 中智能指针,即 std::auto_ptr (目前已被废弃)、std::unique_ptr、std::shared_ptr、std::weak_ptr;std::shared_ptr 共享式指针,多个指针指向同一个对象,当最后一个指针被销毁时,该对象将会被释放; std::weak_pt原创 2021-08-01 20:52:30 · 817 阅读 · 0 评论 -
【C/C++基础进阶系列】C/C++ STL -- Vector 容器源码分析
【C/C++基础进阶系列】C/C++ STL -- Vector 容器源码分析【1】_Vector_base功能,主要负责内存的管理;// ****************************************// _Vector_base 模板提供元素类型与分配器类型// 此处使用 STL 库的内存分配器// ****************************************template <class _Tp, class _Alloc> c原创 2021-07-19 17:26:08 · 523 阅读 · 1 评论 -
【C/C++基础进阶系列】C/C++ STL -- Allocator
【C/C++基础进阶系列】C/C++ STL -- Allocator【1】simple_alloctemplate<class _Tp, class _Alloc>class simple_alloc {// 提供静态成员函数,负责内存的分配与释放// 实际上调用的是 _Alloc 类实例的对应函数public: // 分配 __n * sizeof (_Tp) 大小的内存空间 static _Tp* allocate(size_t __n) {原创 2021-07-19 17:26:32 · 370 阅读 · 2 评论 -
【C/C++基础进阶系列】C/C++ STL -- Iterator
【C/C++基础进阶系列】C/C++ STL -- Iterator【1】reverse_iteratortemplate <class _RandomAccessIterator, class _Tp, class _Reference = _Tp&, class _Distance = ptrdiff_t>class reverse_iterator { typedef reverse_iterator<_RandomAccessIterator, _Tp, _原创 2021-07-19 17:27:15 · 214 阅读 · 0 评论 -
【C/C++基础进阶系列】C/C++ STL -- stl_algobase
【C/C++基础进阶系列】C/C++ STL -- stl_algobase【1】fill函数分析template <class _ForwardIter, class _Tp>void fill(_ForwardIter __first, _ForwardIter __last, const _Tp& __value) { // 判断给定类型是否满足 _Mutable_ForwardIterator 性值 __STL_REQUIRES(_ForwardIter, .原创 2021-07-19 17:26:42 · 253 阅读 · 0 评论 -
【C/C++基础进阶系列】C/C++ STL -- stl_construct
【C/C++基础进阶系列】C/C++ STL -- stl_construct【1】construct函数分析// 在 __p 给定的地址处用 __value 构造 _T1 类型的对象template <class _T1, class _T2>inline void construct(_T1* __p, const _T2& __value) { _Construct(__p, __value);}// 在 __p 给定的地址处构造 _T1 类型的空对象te.原创 2021-07-19 17:27:01 · 549 阅读 · 0 评论 -
【C/C++基础进阶系列】C/C++ STL -- stl_uninitialized
【C/C++基础进阶系列】C/C++ STL -- stl_uninitialized【1】uninitialized_fill_n 函数分析template <class _ForwardIter, class _Size, class _Tp>inline _ForwardIter uninitialized_fill_n(_ForwardIter __first, _Size __n, const _Tp& __x){ // __VALUE_TYPE 的实现如下原创 2021-07-19 17:27:12 · 420 阅读 · 0 评论 -
【C/C++基础进阶系列】C/C++ STL -- concept_checks
【C/C++基础进阶系列】C/C++ STL -- __STL_CLASS_REQUIRES【1】宏__STL_CLASS_REQUIRES定义#define __STL_CLASS_REQUIRES(__type_var, __concept) \ typedef void (* __func##__type_var##__concept)( __type_var ); \ template <__func##__type_var##__concept _Tp1> \ ..原创 2021-07-19 17:26:55 · 359 阅读 · 0 评论 -
【C/C++基础进阶系列】特殊函数总结
【C/C++基础进阶系列】特殊函数总结【1】__builtin_ 函数总结__builtin_ffs(x) 函数,返回 x 的最后一位 1 是从后向前第几位__builtin_clz(x) 函数,返回 x 的二进制下前导的 0 的个数__builtin_ctz(x) 函数,返回 x 的二进制下末尾的 0 的个数__builtin_popcount(x) 函数,返回 x 的二进制下 1 的个数__builtin_parity(x) 函数,返回 x 的二进制下 1 的个数的奇偶性参考致谢原创 2021-06-22 15:20:39 · 282 阅读 · 0 评论 -
【C/C++基础进阶系列】实战记录 -- C++ 应用程序项目结构搭建 (Makefile)
【C/C++基础进阶系列】实战记录 -- C++ 应用程序项目结构搭建 (Makefile)【1】Makefile 相关变量说明$* 不包含扩展名的目标文件名称。 $+ 所有的依赖文件,以空格分开,并以出现的先后为序,可能包含重复的依赖文件。 $< 第一个依赖文件的名称。 $? 所有的依赖文件,以空格分开,这些依赖文件的修改日期比目标的创建日期晚。 $@ 目标的完整名称。 $^ 所有的依赖文件,以空格分开,不包含重复的依赖文件。 $% 如果目标是归档成员,则该变量表示目标的归档成员转载 2020-03-06 13:56:55 · 360 阅读 · 0 评论 -
【C/C++基础进阶系列】实战记录 -- C++ 应用程序项目结构搭建 (CMake)
【C/C++基础进阶系列】实战记录 -- C++应用程序项目结构搭建 (CMake)【1】项目目录结构.├── build├── build.sh├── CMakeLists.txt├── depends├── include├── out├── src└── tst说明 :1. build 目录为 Cmake 生成的中间路径,存放编译生成的文件2. depends 目录为第三方依赖项目文件3. include 目录为本项目中的头文件4. src 目录为本项目中的源文.原创 2021-12-27 10:44:45 · 1060 阅读 · 0 评论 -
【C/C++基础进阶系列】实战记录 -- C++ 应用程序项目结构搭建 (GYP)
【C/C++基础进阶系列】实战记录 -- C++ 应用程序项目结构搭建 (GYP)【1】GYP 中的关键字概述conditions : 条件定义 includes : 包含.gypi文件的列表 target_defaults : 默认的项目配置,每个项目(targets)的配置都需要从这个配置继承 targets : 项目列表 variables : 定义了键值对,可以被其他地方以<(varname)的方式引用 t...原创 2022-01-12 14:11:51 · 1064 阅读 · 0 评论