成员初始化列表用于在构造函数中初始化类的成员变量,与聚合初始化列表不同,它必须使用直接初始化形式,不能使用赋值初始化。 #include<iostream>classFoo{private:intm_x{};intm_y{};public:Foo(intx,inty):m_x{x},m_y{y}// here's our member initialization list{std::cout<<"Foo("<<x<<", "<...
}; 在这个例子中,MyClass的构造函数使用成员初始化列表来初始化m_a和m_b。 成员初始化列表的主要优势是提高程序运行效率。对于类类型成员变量,放到初始化列表中能够比较明显地看到效率的提升,但是如果是个简单类型的成员变量,比如int m_test,其实放在初始化列表或者放在函数体里效率差别不大1。 此外,有些情况下必...
1)初始化const修饰的类成员 2)初始化引用成员数据 成员初始化列表由逗号分隔的初始化列表组成(前面带冒号),它位于参数列调的右括号之后,函数体左括号之前。如果数据成员的名称为mdata,并需要将它初始化为val,则初始化器为mdata(val). Classy::Classy(intval) : mdata(val) 以下三种情况下需要使用初始化成员列...
类的构造函数相较于一般函数,有额外的针对类成员变量的初始化列表,即成员初始化列表。需要特别注意的是,成员初始化列表的初始化顺序并不是按列表顺序,而是按照成员变量的声明顺序来执行的。 class A { public: int a; int b; int c; A(): b(a), a(1); // 正确,a,b都被初始化为1 A(): a(b),...
对于类型1,在成员初始化列表和构造函数体内进行,在性能和结果上都是一样的 对于类型2,结果上相同,但是性能上存在很大的差别 因为类类型的数据成员对象在进入函数体是已经构造完成,也就是说在成员初始化列表处进行构造对象的工作,这是调用一个构造函数,在进入函数体之后,进行的是 对已经构造好的类对象的赋值,又调用...
成员初始化列表 对于const数据成员,必须在执行到构造函数体之前,即创建对象时进行初始化。 2、成员初始经列表由逗号分隔的初始化列表组成(前面带冒号)。它位于参数列表的右括号之后、函数体左括号之前。 3、初值可以是常量或构造函数的参数列表中的参数,这种方法并不限于初始化常量。
类中的const成员只能在初始化列表中指定初始值 #include <stdio.h> class Value { private: int mi ; public: Value(int i) { printf("i = %d\n",i); mi = i; } int getI() { return mi; } }; class Test { private: const int ci; Value m2; Value m3; Value m1; public: Test() :...
1.初始化列表 1.1 构造函数赋值 1.2 初始化列表 1.3 explicit 关键字 2.static 静态成员 2.1 概念 2.2 特性 3.友元 3.1 友元函数 3.2 友元类 4.内部类 5.匿名对象 1.初始化列表 1.1 构造函数赋值 在创建对象时,编译器通过调用构造函数,给对象中各个成员变量一个合适的初始值 ...
何时需要成员初始化列表 class Base{public:intba;intbb;Base(inttmpa,inttmpb){}};class CSub{public:CSub(inttmpv){}};class A:public Base{public:intm_x;intm_y;int&m_yy;constintm_myc;CSub cmysub;//A() :m_x(0), m_y(0)A(int&tmpvalue):m_yy(tmpvalue),m_myc(tmpvalue),Base...
初始化列表:以一个冒号开始,接着是一个以逗号分隔的数据成员列表,每个"成员变量"后面跟一个放在括号中的初始值或表达式。 代码语言:javascript 复制 classDate{public:Date(int year,int month,int day):_year(year),_month(month),_day(day){}private:int _year;int _month;int _day;}; ...