码迷,mamicode.com
首页 > 编程语言 > 详细

《Effective C++》让自己习惯C++:条款26-条款31

时间:2018-12-27 22:48:32      阅读:174      评论:0      收藏:0      [点我收藏+]

标签:stream   using   ini   cout   四种   cas   str   ace   循环   

条款26:尽可能延后变量定义式的出现时间

  • C++推荐在使用对象前才定义对象(调用构造函数赋初值)
  • 只在循环中使用的变量定义在循环内部(除非"赋值"成本低于"构造+析构"成本)

条款27:尽量少做转型动作

  • 旧式风格转型
    • C风格转型 \((T)expression\)
    • 函数风格转型 \(T(expression)\)
  • C++四种新式转型(new-style 或 C++-style cases)
    • const_cast
    • dynamic_cast
    • reinterpret_cast
    • static_cast
  • 尽量避免转型(特别是dynamic_cast)
#include <iostream>
#include <string>
#include <memory>

using namespace std;

class base {
public:
    virtual void type() {cout << "base" << endl;}
};

class drive : public base {
public:
    drive( double d) : dou(d) {}
    virtual void type() {cout << "drive" << endl;}

    void show() {
        cout << dou << endl;
    }

private:
    double dou;
};

int main() {
    shared_ptr<base> b = shared_ptr<base>(new drive(1.2));
    shared_ptr<drive> d = dynamic_pointer_cast<drive>(b);
    d->show();
}

///写成

#include <iostream>
#include <string>
#include <memory>

using namespace std;

class base {
public:
    virtual void type() {cout << "base" << endl;}
    virtual void show() {}
};

class drive : public base {
public:
    drive( double d) : dou(d) {}
    virtual void type() {cout << "drive" << endl;}

    virtual void show() {
        cout << dou << endl;
    }

private:
    double dou;
};

int main() {
    shared_ptr<base> b = shared_ptr<base>(new drive(1.2));
    b->show();
}
  • 使用C++新式转型,而非使用旧式转型

条款28:避免返回handles指向对象内部成分

条款29:为“异常安全”而努力是值得的

条款30:透彻了解inlining的里里外外

条款31:将文件间的编译依存关系降至最低

《Effective C++》让自己习惯C++:条款26-条款31

标签:stream   using   ini   cout   四种   cas   str   ace   循环   

原文地址:https://www.cnblogs.com/narjaja/p/10187516.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!