摘要:
本文总结一下《游戏编程精粹3》1.3节的内容和自己在项目中遇到过或使用过的宏技巧。 可以把宏的用途粗略地分为三类: 一是测试,比如assert及其变种、编译时断言、防止无限循环、__FILE__等,这类宏在Release版本中通常会被替换为空; 二是功能,一些功能通过宏来实现会更方便或者性能更好(把 阅读全文
摘要:
每次编译项目时,编译器会把所有相关的文件复制进项目中并进行编译,但其实,这些被编译的文件中总有一些文件是不会变动的,比如标准库、STL和一些我们自己写的但基本不会更改的头文件等等,可是这些文件却要在每次编译时都被重新包含进项目中并重新编译。可不可以让它们只被编译一次?这样就可以大大缩短编译时间了。事 阅读全文
摘要:
用GLFW处理用户键盘输入有两种方式,一种是使用回调函数,一种是在每一次游戏循环中处理。这两种方法的最大差别在于是否能连续获得键盘输入,第二种方法可以。 一、回调函数 方法介绍 "GLFW官方文档" 对这种方法的讲解很详尽,下面只简单记录一下要点。 我们只需要自定义回调函数key_callback, 阅读全文
摘要:
一、优点 (一)避免忘记初始化 写C++时忘记初始化常常会导致难以发现的bug,而使用auto则可以避免这一风险,因为像 这样的语句编译器是不会通过的——连初始化都没有,编译器没办法推导出 的类型。 (二)避坑 有时会忘记正在 使用的数据结构包含的类型到底是什么 ,使得我们预期的类型和实际类型不一样 阅读全文
摘要:
"上一篇" 介绍了C++对象在无继承的各种情况下的内存空间占用情况和内存布局,这一篇来讨论有继承时的情况。有继承的情况会复杂一些,本文会分为四个层次讨论:单一继承无多态、单一继承有多态、多重继承和虚拟继承。本文中的一些图片和一些观点来自《深入探索C++对象模型》,它C++对象的底层原理讲解得非常详细 阅读全文
摘要:
无论是模板还是auto的型别推导,绝大部分情况下都会忽略引用。 举个栗子: 如果现在有int类型的变量x和它的引用rx,当rx传给函数f时,我们的直觉是T应该被推导为引用,由此直觉还认为定义一个T类型的变量temp并用param赋值后,temp和param应该都是x的引用。然而直觉是错误的,这里T会 阅读全文
摘要:
从内存的角度考虑,不同情况下的C++类有什么区别呢?在空类、具有不同变量/函数、具有静态变量、继承、多态、虚拟继承等情况下,C++对象的内存空间大小和内存布局是什么样的呢?本文讨论没有继承的情况,下一篇讨论有继承的情况 如无特别说明,本文代码均在64位机器上的VS2019运行。 无继承 一、内存布局 阅读全文