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

原创 2010年06月01日 18:44:00

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

企业中堡垒机兼跳板机使用谷歌动态验证构建实战

-
  • 1970年01月01日 08:00

C++构造函数初始化列表的优点

1,以下情况必须在构造函数时写成初始化列表形式:       1)类成员中存在常量,如 const int a;   因为常量只能初始化不能赋值       2)类成员中存在引用,同样的只能初始化不能...
  • humh1986
  • humh1986
  • 2016-02-22 16:26:06
  • 853

复制构造函数和隐式转换 ---临时变量问题

复制构造函数
  • cdhql
  • cdhql
  • 2014-02-14 11:30:47
  • 1827

c++构造函数成员初始化中赋值和初始化列表两种方式的区别

先总结下: 由于类成员初始化总在构造函数执行之前 1)从必要性:      a. 成员是类或结构,且构造函数带参数:成员初始化时无法调用缺省(无参)构造函数      b. 成员是常量或引用:...
  • zizi7
  • zizi7
  • 2016-08-31 11:26:36
  • 8422

构造函数中参数初始化表与函数体赋值的区别

构造函数中参数初始化表与函数体赋值的区别
  • sandwich125
  • sandwich125
  • 2017-01-11 19:45:34
  • 942

使用构造函数直接赋值与使用初始化列表的不同

在C++中,对于成员变量的初始化主要有两种方式: 1. 直接在构造函数中进行赋值 2. 使用构造函数初始化列表进行赋值 虽然在现代编译器中,这两种初始化方式几乎没有性能上的差异,但是需要知道的是...
  • u011941546
  • u011941546
  • 2016-10-25 18:26:20
  • 638

您可能需要将当前数据库的兼容级别设置为更高的值,以启用此功能

在MSSQL数据库中新创建函数时弹出错误信息: “您可能需要将当前数据库的兼容级别设置为更高的值,以启用此功能。有关存储过程 sp_dbcmptlevel 的信息,请参见帮助。” 解决办法:  ...
  • mh942408056
  • mh942408056
  • 2012-05-14 22:13:48
  • 1799

java含参构造函数初始化

package com.mejustdoit; public class Component1 { public Component1(int i) { // TODO Auto-generate...
  • mejustdoit
  • mejustdoit
  • 2015-07-08 17:01:10
  • 1621

【结构体】中构造函数初始化变量及函数的使用

// SOAP线程对象 struct SoapThreadStrcut { HANDLE mSoapThread; // SOAP线程 void* mSoapStruct; // SOAP对象指针 ...
  • u012764241
  • u012764241
  • 2014-12-18 15:44:09
  • 1053

c++类的构造函数两种初始化成员方式的区别

类的构造函数在初始化成员时,有以下两种方式: 方式一: CSomeClass::CSomeClass()  {     x=0;     y=1;  }  方式二: CSomeClass::CSo...
  • fengxinlinux
  • fengxinlinux
  • 2017-04-12 19:34:56
  • 2717
收藏助手
不良信息举报
您举报文章:验证使用初始化形式的构造函数效率可能更高
举报原因:
原因补充:

(最多只允许输入30个字)