• C/C++运算符进阶


      1、转换运算符:一种特殊的类成员函数。定义该运算符后,编译器将在可以使用内置转换的地方自动调用它

    class SmallInt
    {
    public:
        SmallInt(int i = 0) : m_val(i)
        {
            if (i < 0 || i > 255)
                throw std::out_of_range("Bad SmallInt initializer");
        }
    
        // 转换函数必须是成员函数,通常定义为const
        operator int() const { return m_val; }
    private:
        std::size_t m_val;
    };
    
    int main()
    {
        SmallInt si(12);
        double dval = 4.5;
    
        // si转换成int,再转换成double
        if (si >= dval) {}
        // si转换成int,再转换成bool
        if (si) {}
        cout << si << endl; // si转换成int
        // 3.541先被转换成int,再用int构造SmallInt对象
        SmallInt si2 = 3.541;
        int ival = static_cast<int>(si2) + 3; // 显式转换
    
        return 0;
    }

      另外,“语言只允许一次类类型转换”。比如,对于Base1 b1(可转换为int)、Base2 b2(可转换为Base1)、Base3 b3(可转换为Base2),有:

      1)b1 = b3; 不允许,需要借助转换运算符进行两次隐式的类类型转换;

      2)b1 = (Base2)b3; 允许,其中一次类类型转换是我们显式指定的;

      3)double d = b1; 允许,其中一次类型转换是借助语言内置的转换功能完成的。

      参考资料:

      《C++ Primer》

    不断学习中。。。

  • 相关阅读:
    mysql--连接查询(内外连接)
    Mysql--select基础查询
    Mysql--数据定义语言(DDL)
    Mysql--数据操作语言(DML)
    java--String、StringBuilder、StringBuffer的解析和比较?
    Java--equals和 == 的比较和equals()、HashCode()的重写
    Mysql--数据类型
    Mysql--约束
    SpringCloud版本说明
    springBoot 发送邮件
  • 原文地址:https://www.cnblogs.com/hanerfan/p/5136038.html
Copyright © 2020-2023  润新知