随笔分类 - C++
摘要:https://github.com/carbon-language/carbon-lang
阅读全文
摘要:STL 的一些用法 在工程实践中,总是能看到新的未曾了解过的STL函数或用法。每次都得重新查阅,比较麻烦。将一些不懂的内容记录下来,以备时时翻阅 std::copy_if 参考链接:https://www.cnblogs.com/pandamohist/p/13854881.html copy_if
阅读全文
摘要:1.std::enable_if std::enable_if 顾名思义,满足条件时类型有效。它只有在第一个模板参数为true的时候才会定义type。 1.1 源码实现: template<bool B, class T = void> struct enable_if {}; template<c
阅读全文
摘要:assert的作用是先计算表达式 expression ,如果其值为假(即为0),那么它先向stderr打印一条出错信息,然后通过调用 abort 来终止程序运行。 assert分为动态断言和静态断言2种。 c++0x引入了static_assert 关键字,用来实现编译期间的断言,叫静态断言。语法
阅读全文
摘要:1.编译预处理 读取c源程序,对其中的伪指令(以#开头的指令)和特殊符号进行处理, 伪指令主要包括以下四个方面 (1)宏定义指令,如#define Name TokenString,#undef等。对于前一个伪指令,预编译所要做的是将程序中的所有Name用TokenString替换,但作为字符串常量
阅读全文
摘要:C++20 的编译器支持 适应新特性的最简单方法是试用它们。那么接下来我们就面临着这个问题:哪些编译器支持 C++20 的哪些特性?一般来说,http://cppreference.com/compiler_support_能提供在核心语言和库方面的答案。 简单来说,全新的 GCC、Clang 和
阅读全文
摘要:在x86的计算机系统中,内存空间中的栈主要用于保存函数的参数,返回值,返回地址,本地变量等。一切的函数调用都要将不同的数据、地址压入或者弹出栈。因此,为了更好地理解函数的调用,我们需要先来看看栈是怎么工作的。 栈是什么? 简单来说,栈是一种LIFO形式的数据结构,所有的数据都是后进先出。这种形式的数
阅读全文
摘要:加锁或消耗资源,会造成线程阻塞。 那在并发处理中,有没有不加锁的方式,来达到线程安全的? 1. 什么是CAS原子操作 在研究无锁之前,我们需要首先了解一下CAS原子操作——Compare & Swap ,现在几乎所有的CPU指令都支持CAS的原子操作,X86下对应的是 CMPXCHG 汇编指令。 操
阅读全文
摘要:一、左值和右值 左值: 一般来说,能在内存中取得其地址, 即是左值。比如正常的某个变量,有变量名,有相应的内存空间。 右值:在内存在无取得其地址的,或者说没有变量名的,即是右值。比如函数传参时,拷贝出来的临时变量,比如 a = b+c 中的 (b+c)结果。 左值对应变量的存储位置,而右值对应变量的
阅读全文
摘要:new & delete 过程 当我们使用关键字 new 在堆上动态创建一个对象A时,比如 A* p = new A() ,它实际上做了三件事: 1.向堆上申请一块内存空间(做够容纳对象A大小的数据)( operator new ) 2.使用 static_cast 进行类型转换 3.调用构造函数
阅读全文
摘要:Linux下malloc函数主要用来在用户空间从heap申请内存,申请成功返回指向所分配内存的指针,申请失败返回NULL。默认情况下,Linux内核使用“乐观的”分配内存策略,首先粗略估计系统可使用的内存数,然后分配内存,但是在使用的时候才真正把这块分配的内存给你。这样一来,即使用malloc申请内
阅读全文
摘要:说法 1: 局部变量是在程序运行时由栈分配,对于没有初始化的局部变量,VC的DEBUG版会把未初始化的变量value,初始化为sizeof(value)个0xCC。所以我们会看到未初始化的整型的值始终是-858993460,而不是任意值。有意思的是汉字“烫”的编码恰好就是11001100110011
阅读全文
摘要:1.Static Static 最大的作用是限定作用域。 1.面向对象的 静态成员变量 静态成员变量是该类的所有对象所共有的。对于普通成员变量,每个类对象都有自己的一份拷贝。整个运行过程中,静态成员变量一共就一份,只分配一次内存,由该类的所有对象共享访问。所以,静态数据成员的值对每个对象都是一样的,
阅读全文
摘要:单例模式 #pragma once template<typename T> class Singleton { public: Singleton() = default; ~Singleton() = default; Singleton(const Singleton&) = delete;
阅读全文