跳转至

C++ 备忘录*

类的复制构造函数不能传值参数*

class A
{
private:
    int value;

public:
    A(int _value)
    {
        value = _value;
    }
    A(A _a)
    {
        value = _a.value;
    }

    void print()
    {
        cout << value << endl;
    }
};

int main() {
    A a = 10;
    a.print();
    A b = a;
    b.print();
}

以上的代码会编译报错,复制构造函数传值参数时会调用复制构造函数,形成无休止的递归调用。

因此 C++ 不允许复制构造函数传值参数,应将改为 A(const A& _a)

另外 A a = 10; 可生效是应为 A(int _value) 相当于一个转换构造函数,可用于赋值和传参时的隐式类型转换,使用 explicit 关键字可禁用转换构造函数。

vector 扩容*

vector 每次扩容时,新的容量都是前一次的两倍。扩容需要把再开辟新空间后,把原数据复制到新地址。应尽量减少改变数组容量大小的次数。

数组退化为指针*

函数传参时,数组会退化为指针。

字符串常量赋值*

字符串常量会存在静态存储区。字符串常量赋值给字符数组,会存储在栈中,不同数组比较结果不同。赋值给指针,则指针都指向静态存储区的相同地址。


最后更新: November 26, 2020