因为初始化是在定义的同时赋值且只赋值一次,而构造函数体内是先定义后赋值。 🎧2初始化列表 2.1什么叫初始化列表? 🔎在C++中,构造函数的初始化列表是一种用于在创建对象时对成员变量进行初始化的特殊语法。它出现在构造函数的函数体之前,使用冒号:分隔构造函数的参数列表和初始化列表,初始话列表中的语句用逗号“...
在内部类型如ints或者longs或者其它没有构 造函数的类型下,在初始化列表和在构造函数体内赋值这两种方法没有性能上的差别。不管用那一种方法,都只会有一次赋值发生。 当考虑初始化列表的问题时,有一个奇怪的特性应该注意,它是关于C++初始化类成员的,它们是按照声 明的顺序初始化的,而不是按照出现在初始化列表中...
是静态的,如果用构造函数体内赋值,编译会出错。 二、构造函数体内赋值会带来额外的开销,效率会低于构造函数初始化列表 上面的例子改一改: C++代码 template<classt> classnamedptr{ public: namedptr(conststring&initname,t*initptr); private: stringname; t*ptr; }; 1. 2. 3. 4. 5. 6. 7. 8. 并且...
Point( int x, int y, string name ){ _x = 0; _y = 0; _name = name; } _name = name 这个表达式会调用string类的缺省构造函数一次,再调用Operator=函数进行赋值一次。所以需调用两次函数:一次构造,一次赋值 用初始化列表进行初始化 Point( int x, int y, string name ):_x(x),_y(y), _na...
初始化和赋值对内置类型的成员没有什么大的区别。像任一个构造函数都可以。但下列情况必须用带有初始化列表的构造函数:(1)成员类型是没有默认构造函数的类。若没有提供显式初始化时,则编译器隐式使用成员类型的默认构造函数,若类没有默认构造函数,则编译器尝试使用默认构造函数将会失败。(2)const成员或引用类型的...
在这种情况下,你必须使用初始化列表,以避免不要的分配两次内存。在内部类型如ints或者longs或者其它没有构 造函数的类型下,在初始化列表和在构造函数体内赋值这两种方法没有性能上的差别。不管用那一种方法,都只会有一次赋值发生。 当考虑初始化列表的问题时,有一个奇怪的特性应该注意,它是关于C++初始化类成员的...
初始化和赋值对内置类型的成员没有什么大的区别,像任一个构造函数都可以。但有的时候必须用带有初始化列表的构造函数:(1) 成员类型是没有默认构造函数的类。若没有提供显式初始化时,则编译器隐式使用成员类型的默认构造函数,若类没有默认构造函数,则编译器尝试使用默认构造函数将会失败。(2) ...
第一种是通过在构造函数内赋值 class Point { public: Point(){ _x = 0; _y = 0;}; Point( int x, int y ){ _x = 0; _y = 0; } private: int _x, _y; }; 第二种是使用初始化列表 class Point { public: Point():_x(0),_y(0){}; ...
既然构造函数初始化列表和构造函数体内赋值都可以对成员变量赋值,那么二者有何区别,是不是二者等效呢? 一、若类的数据成员是静态的(const)和引用类型,必需用初始化列表 静态(const)的数据成员只能初始化而不能赋值,同样引用类型也是只可以被初始化,那么只有用初始化列表。