随笔分类 -  C++

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

点击右上角即可分享
微信分享提示