zoukankan      html  css  js  c++  java
  • 【C++笔记】explicit 指定符

    用于抑制构造函数的自动隐式转换。

    struct A
    {
        A(int) { }      // 转换构造函数
        A(int, int) { } // 转换构造函数 (C++11)
        operator bool() const { return true; }
    };
     
    struct B
    {
        explicit B(int) { }
        explicit B(int, int) { }
        explicit operator bool() const { return true; }
    };
     
    int main()
    {
        A a1 = 1;      // OK:复制初始化选择 A::A(int)
        A a2(2);       // OK:直接初始化选择 A::A(int)
        A a3 {4, 5};   // OK:直接列表初始化选择 A::A(int, int)
        A a4 = {4, 5}; // OK:复制列表初始化选择 A::A(int, int)
        A a5 = (A)1;   // OK:显式转型进行 static_cast
        if (a1) ;      // OK:A::operator bool()
        bool na1 = a1; // OK:复制初始化选择 A::operator bool()
        bool na2 = static_cast<bool>(a1); // OK:static_cast 进行直接初始化
     
    //  B b1 = 1;      // 错误:复制初始化不考虑 B::B(int)
        B b2(2);       // OK:直接初始化选择 B::B(int)
        B b3 {4, 5};   // OK:直接列表初始化选择 B::B(int, int)
    //  B b4 = {4, 5}; // 错误:复制列表初始化不考虑 B::B(int,int)
        B b5 = (B)1;   // OK:显式转型进行 static_cast
        if (b2) ;      // OK:B::operator bool()
    //  bool nb1 = b2; // 错误:复制初始化不考虑 B::operator bool()
        bool nb2 = static_cast<bool>(b2); // OK:static_cast 进行直接初始化
    }
  • 相关阅读:
    农场灌溉问题(回溯)
    六数码问题(广搜_队列)
    求图像周长(回溯)
    六数码问题(回溯)
    花生米(四)
    活动安排(贪心算法)
    自我介绍
    三位老师
    培训期间
    工作十个月感触
  • 原文地址:https://www.cnblogs.com/liez/p/8011005.html
Copyright © 2011-2022 走看看