zoukankan      html  css  js  c++  java
  • More Effective C++

    5. 对定制的 "类型转换函数" 保持警觉

    允许编译器执行隐式类型转换,害处多过好处,不要提供转换函数,除非你确定需要。

    class foo
    {
      foo(int a = 0, int b = 1);
      operator double() const;
      ...
    };
    
    foo test(1, 2);
    double d = 0.5 * test; // 编译器会调用double进行隐式转换
    

    上述类型隐式转换可能导致错误(非预期)的函数被调用。解决方法 1.类似于C++ string 一样,添加一个函数专门做转换,类似string的c_str()转换string为const char* .

    ``` class foo { foo(int a = 0, int b = 1); double asDouble() const; // 添加一个成员函数做转换 ... }; ```

    2.使用 explicit 关键字 .

    3.使用代理对象,也就是类中再加一个代理类做.

    6. 区别 increment/decrement 操作符的前置(prefix)和后置(postfix)形式

    看一下前置和后置重载例子:

    class foo{
    public:
      foo& operator++();
      const foo operator++(int);
    
      foo& operator--();
      const foo operator--(int);
    };
    

    为了防止 "i++++" 情况出现,后置式返回了一个const对象。 因此,正常情况下我们应该使用前置式,直接返回引用,而不是临时拷贝对象,效率会更高。

    7. 千万不要重载&&,||和, 操作符

    8. 了解各种不同意义的new和delete

    new的主要介绍如下:

    // 1.首先分配内存  2.执行构造函数
    string *ps = new string("Memory Management");
    
    // 分配内存
    void* operator new(size_t size);
    
    // 在 buffer 内存处构建foo对象
    new (buffer) foo(int i); 
    
    

    2018年10月1日15:59:02

  • 相关阅读:
    openstack首页默认跳转
    centos7.3挂在移动硬盘(亲测)
    管理openstack多region介绍与实践
    一款功能强悍的web磁盘管理工具 (A powerful web disk management tools)
    文件及目录的归属关系
    Linux 权限基础说明
    umask默认权限分配
    linux删除、读取文件原理
    linux 文件类型
    LINUX 目录结构
  • 原文地址:https://www.cnblogs.com/blog-yejy/p/9734835.html
Copyright © 2011-2022 走看看