//TC++PL书中222页说到:使用初始化形式的构造函数效率可能更高
#include <iostream>
using namespace std;
struct String{
char str[100];
String(){
printf("String default/n");
strcpy(str, "hello/n");
}
String(const String &st){
printf("String construct/n");
strcpy(str, st.str);
}
void operator = (const String &st){
strcpy(str, st.str);
}
};
struct Node{
public:
int u;
String noStr;
// Node(int uu, const String &st):u(uu), noStr(st){}
Node(int uu, const String &s){
u = uu, noStr = s;//这里会进行一次默认构造函数初始化然后再赋值
}
};
//我的理解左值的noStr成员首先必须有内存,也就是必须先被被构造,即调用默认构造函数。
//而上面一个表达式则直接通过String(const String &st)来构造,不会先去调用String()。
int main(){
String s;
strcpy(s, "world/n");
Node no(1, s);
printf("%d %s", no.u, no.noStr.str);
system("pause");
return 0;
}
修改Node构造函数的注释,运行程序就会知道了,第一种初始化形式的表达式不会调用默认构造函数。
注意不用引用传递的话中间在传递参数时会更多次的调用构造函数。话说上次tc一题明明算法复杂度没问题结果却TLE,测试一看原来是一个50*50的vector<string>我没用const &传递。。。
注意如果是Node no = XXX.那么将会调用(默认)复制构造函数,效率显然会比先定义然后再赋值要高。