C++中的异常处理是在运行时而不是编译时检测的。为了实现运行时检测,编译器创建额外的代码,然而这会妨碍程序优化。
在实践中:
一个操作或者函数可能会抛出一个异常;
一个操作或者函数不可能抛出任何异常。
使用noexcept指定函数或操作不会抛出异常,会给编译器更大的优化空间,同时减少运行时开销。
...
阅读更多
mutable从字面意思来说,是「可变的;会变的」
修饰类的成员变量,用来突破const的限制
#include <iostream>
class Person{
public:
explicit Person(int a):age(a){ }
~Person(){ }
i...
阅读更多
explicit关键字只能用于修饰类构的造函数,表明该构造函数是显式的,不能用于隐式转换和复制初始化。
该关键字只能用来修饰类内部的构造函数;
禁止隐式调用拷贝构造函数 ;
禁止类对象之间的隐式转换;
一般只用于修饰单参构造函数,因为无参构造函数和多参构造函数本身就是显式调用的。
在C++...
阅读更多
alignof
alignof(type),用于获取类型的对齐字节数;返回size_t类型;alignof只能用于类型。
#include <iostream>
using namespace std;
struct DemoStruct2 {
short s1; ...
阅读更多
枚举类型
枚举类型(enumeration)是 C++ 中的一种派生数据类型,它是由用户定义的若干枚举常量的集合。
枚举元素作为常量,它们是有值的。编译系统为每个枚举常量指定一个整数值。默认状态下,这个整数值就是所列举元素的序号,序号从0开始。
可以在定义枚举类型时为部分或全部枚举常量指定整数值,在指定值之前...
阅读更多
引入namespace
using namespace std;
将nampespace中单个名字注入到当前作用域
将其它 namespace 的成员引入本命名空间的 当前作用域 (包括其嵌套作用域) 。
一次只引入一个命名空间成员。
using std::map
map<int, int> ...
阅读更多
struct和class有很大的相似性。
但是两者最大的区别就在于思想上,一般来说,struct更适合看成是一个数据结构(纯粹的数据对象,POD结构)的实现体,class更适合看成是一个对象的实现体。
1. 默认的访问权限
struct默认的数据访问控制是public的
calss默认的数据访问控制是priva...
阅读更多
1. new操作符
new运算符用于在堆上动态分配。
如果分配成功,则返回指向分配内存的指针;如果分配失败,则抛出std::bad_alloc异常。
new内置类型
// 动态申请一个int类型的空间
int* a = new int;
// 动态申请一个int类型的空间并初始化为11
int* b = ne...
阅读更多