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 进行直接初始化
    }
  • 相关阅读:
    4、现有的命名方式有多少种?请举例说明。
    第二次作业
    第一次作业
    RateLimiter源码
    使用ASM字节码框架实现动态代理
    Java流机制学习
    Java8 Stream 学习总结
    XML实体解析器的作用
    DefaultResouceLoader的设计
    RSA 非对称加密 数字签名 数字证书
  • 原文地址:https://www.cnblogs.com/liez/p/8011005.html
Copyright © 2011-2022 走看看