《Effective Modern C++》条款10:优先选用enum class,而非enum
简述
众所周知,使用C++98中的枚举型别定义的枚举量,会泄漏到枚举型别所在的作用域中,这也意味着在此作用域内不能再有其他实体取相同的名称。因此,C++98中的枚举型别又称之为:不限作用域的枚举型别。
C++11为了解决这一问题,引入了限定作用域的枚举型别。由于限定作用域的枚举型别是通过”enum class“声明的,所以有时它们也被称为枚举类。
众所周知,使用C++98中的枚举型别定义的枚举量,会泄漏到枚举型别所在的作用域中,这也意味着在此作用域内不能再有其他实体取相同的名称。因此,C++98中的枚举型别又称之为:不限作用域的枚举型别。
C++11为了解决这一问题,引入了限定作用域的枚举型别。由于限定作用域的枚举型别是通过”enum class“声明的,所以有时它们也被称为枚举类。
在C++11中有三种指定初始化值得方式,分别是使用小括号()、等号=和大括号{}。其中,前两种在C++98中就已经存在,而使用大括号的初始化语法则是C++11引入的。
一个函数模板的声明和调用大致形如:
1 | // 声明 |
模板型别推导的结果,不仅依赖于传入实参的型别,还依赖函数形参的型别。
问题描述:
求均值最常用的方法是将两数相加再除以2,但是当两个数都大于其最大值的一半时,
相加的结果会发生内存移除。比如:
1 | unsigned average(unsigned a, unsigned b) |
表达式x = x & (x - 1)的含义是:
每执行一次,就会把x二进制格式下最右边的1变为0,换言之就是该表达式有效的执行次数等于x二进制格式下1的个数。
表达式:x & (-x)的含义:
返回x在二进制下的最右边的1表示的值:
memset是C/C++编程中常用的函数,一般用于申请内存后的初始化操作,比如:
1 | char* buffer = (char*)malloc(1024); |
memset接收三个参数:
这个函数看似简单,但是如果使用不当则会导致一些未知的bug。以下是目前遇到的几个陷阱。
种一棵树最好的时候的是十年前,其次就是现在
如何阅读一本书?这是一个一直困扰我的难题。几年前有幸拜读了莫提莫·J·艾德勒和查尔斯·范多伦写的《如何阅读一本书》。但是这本书本身的阅读难度不小,所以阅读过程感觉如鲠在喉一般的难受,看完之后仍然对书中提及的阅读方法论一知半解。今天在网路上看到了一份关于阅读方法的PPT文案,里面提及的方法恰好是对这本书的概括与总结。下面内容是我对这篇文稿的摘要与理解。
《三体》是我看的第一本科幻小说,与很多在学生时期就接触了这本书的朋友比起来,即将三十而立的我觉得有点相见恨晚。书中涉及了天文学、物理学、计算机学等众多专业知识。在阅读这本书的过程中,总会时不时地感叹作者想象力之丰富,知识之渊博。与作者刘欣慈一样同为程序员的我读起来多了一丝亲切感。过去的自己对科幻小说存在一些误解,认为科幻小说无非只是天马行空的想象罢了,这类超现实的小说只适合用来消遣,并没有太多实用性。现在我为自己愚蠢的想法道歉:一本好的小说一定都蕴含着一个深刻的内核,或是对生命的思考,或是对人性的剖析等等。而小说的功能则是通过虚构一个故事或世界让读者更好的理解作者要表达的想法,并引导读者产生共鸣。《三体》这本书在我看来,它提出的是对人类的究极拷问:生存还是死亡?
最近时间管理方面又出现问题,感觉做事的效率明显下降很多。在知乎上看到李开复先生关于时间管理的文章,觉得很有感触,遂做一些笔记以自省。