1、尾置返回类型
在函数新参列表之后,使用一个->,暗示函数的返回类型,尾置返回类型的语法下,我们可以在返回类型中使用新参相关信息。
2、类型初始化
C++中存在多种初始化方式,例如:
YDJ ydj_src; //默认初始化,默认构造函数
YDJ ydj_dst_1 = ydj_src; //拷贝初始化,拷贝构造函数
//这里区分拷贝复制运算符
YDJ ydj_dst_2(ydj_src);
YDJ ydj_dst_3 = (ydj_src);
YDJ ydj_dst_4{ ydj_src };
YDJ ydj_dst_5 = { ydj_src };
C++11中使用统一初始化{}来整合上述初始化操作。
2.1、统一初始化使用场景如下:
- 初始化容器元素:
vector<int> v{1,2,3};。 - 为类中非静态数据成员指定默认值。
class Creature
{
int life_value{ 999999 };
}
- 初始化不可拷贝对象
std::atomic<YDJ> ydj{ ydj_src };
2.2、统一初始化拥有以下特性
- 不允许内置类型的窄向转换
- 避免与函数声明间的冲突
C++中任何可以被决议为声明的东西,必须被决议为声明。 - 只要类中存在初始化列表
std::initializer_list构造函数,括号初始化就会优先调用它,导致原本匹配的构造函数被初始化列表的构造函数劫持。
class Creature
{
public:
Creature(int life_value, int fortune); //构造函数1
Creature(std::initializer_list<double> param); //构造函数2
};
//下方对象构造中,构造函数2将被调用
Creature creature{ 100,300 };
- 对于
std::vector类型,使用()初始化与使用{}初始化有较大不同
vector<int> a{ 10,1 }; //a 中元素 10 1
vector<int> b( 10,1 ); //b 中元素 1 1 1 1 1 1 1 1 1 1
3、别名声明
typedef的替代
- 使用
class ZhiGeLiu
{
……
};
using ZhuMoZhiLi = ZhiGeLiu;
ZhuMoZhiLi zhiGeLiu;
4、限域枚举
在非限定枚举中,成员函数的作用域与非限定枚举对象定义的作用域相同。同传统枚举类型相比,限域枚举类限定了成员的作用域。
- 使用
enum class Nationality {
ZhongYuan,
HaiJing,
MiaoJiang,
YuGuo,
YaoJie,
DongYing,
DaoYu,
FoGUo,
XianDao
};
yanHanQing.nationality=Nationality::HaiJing;