当对象在创建时获得了一个特定的值,我们说这个对象被初始化(initialized)。
这里说的对象特指一块能存储数据并具有某种类型的内存空间。
初始化与赋值的区别:
初始化:为对象申请存储空间,创建新的对象,并赋予其一个初始值。
赋值:是把已经创建的对象的当前值擦除,并以一个新值来替代。
...
阅读更多
typeid是一个运算符,用来获取类型信息:
对于基本类型,类型信息指数据的类型。
对于类类型,类型信息指对象所属的类、所包含的成员、所在的继承关系等。
typeid运算符返回std::type_info的引用(std::type_info在头文件typeinfo中定义)
如果表达式的类型是类类型...
阅读更多
static_cast
static_cast相当于传统的C语言里的强制转换。
主要用于:
用于基本数据类型之间的转换,如把int转换成char,这种转换的安全性需要开发人员来保证。
把空指针转换成目标类型的空指针。
把任何类型的表达式转换成void类型。
用于基类和派生类之间指针或引用的转换。...
阅读更多
存储说明符
存储说明符(storage class specifier)是名字的声明语法中的声明说明符序列 的一部分。它与名字的作用域一同控制名字的两个独立性质:它的存储期和它的链接属性。
存储说明符
说明
备注
...
阅读更多
struct和class有很大的相似性。
但是两者最大的区别就在于思想上,一般来说,struct更适合看成是一个数据结构(纯粹的数据对象,POD结构)的实现体,class更适合看成是一个对象的实现体。
1. 默认的访问权限
struct默认的数据访问控制是public的
calss默认的数据访问控制是priva...
阅读更多
C++中的异常处理是在运行时而不是编译时检测的。为了实现运行时检测,编译器创建额外的代码,然而这会妨碍程序优化。
在实践中:
一个操作或者函数可能会抛出一个异常;
一个操作或者函数不可能抛出任何异常。
使用noexcept指定函数或操作不会抛出异常,会给编译器更大的优化空间,同时减少运行时开销。
...
阅读更多
mutable从字面意思来说,是「可变的;会变的」
修饰类的成员变量,用来突破const的限制
#include <iostream>
class Person{
public:
explicit Person(int a):age(a){ }
~Person(){ }
i...
阅读更多
explicit关键字只能用于修饰类构的造函数,表明该构造函数是显式的,不能用于隐式转换和复制初始化。
该关键字只能用来修饰类内部的构造函数;
禁止隐式调用拷贝构造函数 ;
禁止类对象之间的隐式转换;
一般只用于修饰单参构造函数,因为无参构造函数和多参构造函数本身就是显式调用的。
在C++...
阅读更多