constexpr是C++11引入的关键字,主要目的是为了解决const关键字的二义性,constexpr既可用于修饰对象,又可用于修饰函数。
constexpr是C++11引入的关键字,主要目的是为了解决const关键字的二义性,constexpr既可用于修饰对象,又可用于修饰函数。
字面常量0的型别是int,而非指针。C++会在只能使用指针的语境中才勉强将其解释为空指针。
NULL是一个宏定义,而非指针。同样,C++会在只能使用指针的语境中才勉强将其解释为空指针。
1 | /* Define NULL pointer value */ |
nullptr是C++关键字,不具备整型型别。实际上,它也不具备指针型别,但是它可以隐式转换成任意指针型别,这也就是为什么nullptr可以用于初始化所有指针型别的原因。
众所周知,使用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。以下是目前遇到的几个陷阱。