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