验证使用初始化形式的构造函数效率可能更高

//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.那么将会调用(默认)复制构造函数,效率显然会比先定义然后再赋值要高。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值