class B {
public:
B() {
cout << "构造函数执行" << endl;
}
};
int main(){
B b;
}
发现此时执行了构造函数。之后我们将b后面加上()
class B {
public:
B() {
cout << "构造函数执行" << endl;
}
};
int main(){
B b();
}
此时发现输出为空,说明没有执行构造函数,说明b未被初始化。下面我们把()换成{}
class B {
public:
B() {
cout << "构造函数执行" << endl;
}
};
int main(){
B b{};
}
此时,执行了构造函数。
这说明一个问题()不能乱加,否则会导致类对象无法初始化
下面我们给B构造函数加上参数试试
class B {
public:
B(int i, int j) {
cout << "构造函数执行" << i << j << endl;
}
};
int main(){
B b;
}
此时不带参数直接报错,因为没有相应的构造函数嘛,肯定的~,下面我们用()试一下
class B {
public:
B(int i, int j) {
cout << "构造函数执行" << i << j << endl;
}
};
int main(){
B b(1, 2);
}
发现b正常初始化了,换成{}再试一下
class B {
public:
B(int i, int j) {
cout << "构造函数执行" << i << j << endl;
}
};
int main(){
B b{1, 2};
}
正常初始化,没问题
下面我们换成内置类型再试一下
int main(){
int i;
cout << i << endl;
}
报错,未初始化i变量
int main(){
int i();
cout << i << endl;
}
报错,没这种写法,不能这样初始化i
int main(){
int i{};
cout << i << endl;
}
可以,输出i为0,说明进行了初始化。
{}在C++11中,专门用于初始化,各种变量与对象的初始化。
所以呢。。。不知道用啥对的时候就用{}吧,()只有在非内置类型并且类的构造函数不为空时可用,当然下面这种写法除外
int i = int();
B b = B();
这种是从类型初始化出对象以后付给类对象的~,具体的细节还需要我们自己多多探究,尝试。。。。