《EffectiveModernC++》第二章:auto 第二章 autoitem5:优先考虑auto而非显式类型声明12345678template<typename It> //对从b到e的所有元素使用void dwim(It b, It e) //dwim(“do what I mean”)算法{ while (b != e) { typename std: 2022-12-03 C++ EffectiveModernCPP
《EffectiveModernC++》第一章:类型推导 第一章 类型推导item1:理解模板类型推导考虑这样一个函数模板: 12345template<typename T>void f(ParamType param);//调用:f(expr) //从expr中推导T和ParamType 我们可以给T加上一些修饰,如下: 123456template<typename T>void f(const T& param) 2022-12-03 C++ EffectiveModernCPP
C++列表初始化的存在意义 列表初始化的作用列表初始化是初始化行为: 1complex(double r=0,double i=0):re(r),im(i){} 大括号里写叫做赋值行为: 1complex(double r=0,double i=0){re=r;im=i;} 首先要搞清楚他俩并不是等价的。 没有了列表初始化,仅仅依靠大括号很难解决下面几个问题: 在大括号内无法初始化父类 2022-10-16 C++
C++内存管理Part1: new/delete及其重载 C++内存管理Part1: new/delete及其重载内存分配的每一层面这门课不会探讨到O.S. API C++可以分配内存的工具这是一些内存的基础工具 首先是前两个比较基础的: 1234567//CRT,C Runtime Library中的malloc/freevoid* p1 = malloc(512);free(p1);//newcomplex<int>* p2 = ne 2022-09-10 C++ 内存管理
GAMES101(7-9):Shading GAMES101-ShadingVisibility/occlusion(可见性/遮盖)z-buffer算法 本质就是对一个物体的三角形面片的每个像素维护深度最浅处。 图示: 复杂度:假设每个三角形覆盖的像素数都是一个常数值,那么n个三角形复杂度就是$O(n)$ shading 基本理论我们可以认为材质影响着物体的着色 我们看一个图: 我们认为决定材质的三种光为:高光,漫反射,间接光照(环 2022-07-24 图形学 GAMES101
现代C++中的constexpr,内敛变量 constexpr简单认识constexpr编译期编程很烧脑,为此有时候一个简单的计算也需要写大量代码,C++为此做了很多改进,让编译期编程简单了很多。当然对于一些没有改进的东西仍需要模板元编程,因此模板元编程仍然是很重要的一部分。 考虑下面代码是否可以运行? 1234567891011121314int sqr(int n){ return n*n;}int main( 2022-07-24 C++
C++: SFINAE SFINAE一个基本的重载协议(SFINAE最初思想来源)SFINAE全称为:替换失败非错(substituion failure is not an error) 我们已经看了不少的模板特化,那么当一个函数名和某个函数模板名称匹配后,他的重载协议大致如此: 根据名称找出所有适用的函数和函数模板 对于适用的函数模板,要根据实际情况对模板形参进行替换;替换过程中如果发生错误,这个模板会被丢弃 在上 2022-07-24 C++
模板元编程(编译期计算)初探 模板元编程(编译期计算)初探编译期求Fib什么是编译期计算: 123456789101112131415161718192021222324template<int n>struct fib{ static_assert(n>=0, "Argument must be non-negative"); static const int value = fib& 2022-07-24 C++
C++:ObjectSlicing和多态 ObjectSlicing和多态前置知识多态不过多介绍,在之前写的文章中有讲到,主要从这两方面理解到多态即可: 1.虚指针(vptr)和虚表(vtbl) 2.动态绑定和静态绑定 ObjectSlicing对象切片12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849class 2022-07-17 C++
C++ 理解智能指针(手写一个简单的智能指针) 简单手写一个智能指针,不会过多关注具体功能上的实现,而是思想上的实现。 比如指针上的诸多行为++,--这里不会多次提到,而使一些关于智能指针特性和思想的实现。 RAII与手写智能指针RAII准则,封装指针1234567891011121314151617181920212223242526272829303132class shape{public: shape() 2022-07-17 C++