C++中容易混淆的概念
初始化和函数声明
new int[size]();
这种写法表示整个数组初始化为0。因为空括号 (),意味着value initialization,而int属于primitive type,对于primitive type来说,value inialization等同于zaro initialization。(ref: c++11标准5.8.5)
注意:使用空括号()初始化时,前面应该是类型,否则不是初始化,而是声明了一个函数。比如:
C x1; // ok,初始化了一个对象实例。
C x1(); // oops,声明了一个函数原型。
x1 = C(); // ok,初始化了一个匿名实例,然后赋值给x1。
拷贝构造和赋值构造函数
赋值构造函数是个错误的术语!应该称作拷贝赋值函数,因为后者其实并不用于构造。
class A {
A();
A(const A&);
A& operator=(const A&);
};
A a;
A b(a); // copy ctor
A b = a; // copy ctor!!
b
...