EffectiveModernCpp:语法

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;
最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

推荐阅读更多精彩内容