zoukankan      html  css  js  c++  java
  • C++中的运算符重载

    运算符重载给c++提供了很强大的功能,使得我们可以将一个类设计得跟内置类型差不多了。

    但是运算符这种东西最大的问题就是,看起来直观,却常常隐匿了实际的函数调用过程,时常容易让人困惑。所以在google c++编码规范里面,建议直接用普通的成员

    函数而不是重载运算符。

    可以看下面的代码段:

        class Array {
        public:
          int size() const;
          float& operator[] (int index);
          // ...
        };
        int main()
        {
          Array a;
          for (int i = 0; i < a.size(); ++i)
            a[i] = 7;    // This line invokes Array::operator[](int)
          // ...
        }

    注释的那一行显得及其简洁,但实际涉及到两个函数调用operator[] 和operator=,关键是若是不看类Array的定义,你可能很难知道a[i]返回的是个什么东西:C++支持运算符重载!

    还有就是赋值运算符,这是每个类所避不开的成员函数,即使不定义也会默认生成。所以一定要记住编译器默认生成的赋值运算符的函数原型(输入参数类型,返回类型):

    class A
    {
    public:
         A& operator=(const A&a);
         A& operator=(A&& a);
    }

    其中第二个是c++11有了右值引用之后新加的。

    总之,一个务必小心的原则是:每次看到运算符,把它展开成函数!

  • 相关阅读:
    阻塞队列之LinkedTransferQueue
    BlockingQueue drainTo()
    jedis常用API
    在Redis集群中使用pipeline批量插入
    序列化
    springmvc单文件上传
    hibernateValidate
    springmvc使用spring自带日期类型验证
    springmvc自定义日期编辑器
    springmvc__SimpleUrlHandlerMapping(对访问地址进行加工,以键值对的形式)
  • 原文地址:https://www.cnblogs.com/hustxujinkang/p/5065800.html
Copyright © 2011-2022 走看看