More Effective C++

时间:2019-11-11
本文章向大家介绍More Effective C++,主要包括More Effective C++使用实例、应用技巧、基本知识点总结和需要注意事项,具有一定的参考价值,需要的朋友可以参考一下。

指针与引用的区别

任何情况下都不能使用指向空值的引用。一个引用必须总是指向某些对象。不存在指向空值的引用这个事实意味着使用引用的代码效率比使用指针的要高。因为在

使用引用之前不需要测试它的合法性。

指针与引用的另一个重要的不同是指针可以被重新赋值以指向另一个不同的对象。但是引用则总是指向在初始化时被指定的对象,以后不能改变。

尽量使用C++风格的类型转换

const_cast<>用于转换掉对象的const属性。

dynamic_cast 把指向基类的指针或引用转换成指向其派生类或其兄弟类的指针或引用,而且你能知道转换是否成功。失败的转换将返回空指针(当对
指针进行类型转换时)或者抛出异常(当对引用进行类型转换时)。

不要对数组使用多态

class BST
{
public: 
    BST() :iData(1) {}
    BST(int d) :iData(d) {}
    int iData;
};
class BalancedBST :public BST
{
public:
    BalancedBST() :BST(1), dData(0.1)
    {

    }
    BalancedBST(int i, double d) :BST(i), dData(d) {}
    double dData;
};
void printBSTArray(ostream& s, const BST array[], int num)
{
    for (int i=0;i<num;++i)
    {
        s << array[i].iData<<" "; //编译器认为元素间隔为sizeof(BST)
    }
}
int main()
{
    BalancedBST bst[10];
    printBSTArray(cout, bst, 10);//错误
    system("pause");
    return 0;
}
View Code

原文地址:https://www.cnblogs.com/larry-xia/p/11834354.html