美文网首页
C++ 易混易错总结

C++ 易混易错总结

作者: 陈星空 | 来源:发表于2020-03-30 22:02 被阅读0次
    1. 数组名&指向数组的指针
    int a[3] = {1,5,10};
    cout << a << endl;
    cout << *a << endl;
    cout << *a + 1 << endl;
    cout << *(a + 1) << endl;
    cout << (*a) + 1 << endl;
    

    结果表明*a+1=(*a)+1

    0133FB90
    1
    2
    5
    2

    1. 默认形参
    void print(int b, int c, int d = 2, int a = 1)
    {
        cout << b << endl;
        cout << c << endl;
        cout << d << endl;
        cout << a << endl;
    }
    

    结果表明:
    1)默认形参需要放到形参列表最后面,否则编译报错void print(int b=1, int c, int d = 2, int a = 1)
    2)默认形参可以不给值,也可以给值,其他必须传值

    print() 编译错误
    print(1) 编译错误
    print(1,2,3) 正确
    print(1,2,3,4) 正确

    1. 拷贝构造和赋值构造的调用
      调用的是拷贝构造函数还是赋值运算符,主要是看是否有新的对象实例产生。如果产生了新的对象实例,那调用的就是拷贝构造函数;如果没有,那就是对已有的对象赋值,调用的是赋值运算符。

    调用拷贝构造函数主要有以下场景:
    对象作为函数的参数,以值传递的方式传给函数。 
    对象作为函数的返回值,以值的方式从函数返回
    使用一个对象给另一个对象初始化

    实例:

    class AA
    {
    public:
        AA()
        {
            cout << "默认构造" << endl;
        }
        AA(int a)
        {
            cout << "有参构造" << endl;
        }
    
        AA(const AA& aa)
        {
            _data = aa._data;
            cout << "拷贝构造" << endl;
        }
    
        AA& operator=(const AA& aa)
        {
            cout << "赋值构造" << endl;
            _data = aa._data;
            return *this;
        }
    
    private:
        int _data;
    };
    
    
    int main()
    {
        AA a1(1);
        AA a2(a1);
        AA a3;
        a3 = a1;
        AA a4 = a2;
        a2 = a1;
        return 0;
    }
    

    结果

    有参构造
    拷贝构造
    默认构造
    赋值构造
    拷贝构造
    赋值构造

    1. vector操作

    1)resize不会改变capacity大小,只会改变size大小
    2)删除空间需要clear+shrink_to_fit
    3)reserve只可以改变capacity大小,不会改变size大小


    image.png

    实例:

        vector<int> v;
        cout << v.size()<<" "<<v.capacity() << endl;
        v.resize(10, 1);
        cout << v.size() << " " << v.capacity() << endl;
        v.resize(3, 2);
        cout << v.size() << " " << v.capacity() << endl;
        v.reserve(20);
        cout << v.size() << " " << v.capacity() << endl;
    

    0 0
    10 10
    3 10
    3 20

    相关文章

      网友评论

          本文标题:C++ 易混易错总结

          本文链接:https://www.haomeiwen.com/subject/capbuhtx.html