由买买提看人间百态

boards

本页内容为未名空间相应帖子的节选和存档,一周内的贴子最多显示50字,超过一周显示500字 访问原贴
Programming版 - C++的"初始化"小结
相关主题
simple question on C++ initialization list关于构造函数的一道测试题 (转载)
刚看完类这一章,有些大小问题,请指教,谢谢[合集] 关于构造函数
请教c++数组初始化为啥gcc找不到类的构造函数?
c++类未完成初始化,如何引用this?构造函数里的异常处理
还没被劝退C++的都来看看这个吧[合集] 基类函数已经是virtual了,为啥子类还要virtual啊?
C++构造函数的问题C++里,Base Class如何调用Derived Class的method
初始化列表问题C++编程问题:union inside struct
突然想到一个老题,构造函数n多变量初始化*(&b1)=b编译不过,b1=b可以,区别是?
相关话题的讨论汇总
话题: 初始化话题: 构造函数话题: 默认话题: 类型话题: 基类
进入Programming版参与讨论
1 (共1页)
y**b
发帖数: 10166
1
以前读C++ Primer第四版中文版给自己写了个摘录,一搜索“初始化”,发现内容还很
庞杂,贴出来供参考,前面是页号。
042 两种初始化: 直接初始化(), 拷贝初始化=
044 变量初始化:类类型调用默认构造函数,局部内置类型不初始化,全局内置类型初
始化为零。
080 容器元素的值初始化(未指定元素的初始化式时):类类型调用默认构造函数,内置
类型置零。
097 数组元素的初始化(同变量初始化规则044):元素为类类型的数组调用默认构造函数
;局部内置数组不初始化,全局内置数组初始化为零。
117 new动态数组元素的初始化:类类型调用默认构造函数,内置类型不初始化,或指定
进行值初始化为零(且只能为零)。
151 new动态对象之初始化:类类型调用默认构造函数,内置类型不初始化,或指定进行
值初始化为任意值。
对提供了默认构造函数的类类型,没有必要进行值初始化, 会自动调用构造函数:
string *p=new string;和string *p=new string();无区别。
对内置类型或未定义默认构造函数的类类型,存在区别:int *p=new int;
int *p=new int(); int *p=new int(8);
200 指向const对象的指针可以初始化为指向非const对象,指向非const对象的指针不可
指向const对象。
227 对于含有内置类型或复合类型成员的类,应定义默认构造函数并提供初始化式。
对于类类型成员,如果不提供初始化式,会自动调用其默认构造函数进行初始化,
这点与合成的默认构造函数相同。
合成的默认构造函数的初始化规则同变量初始化规则044。
合成的默认构造函数一般适用于仅包含类类型成员的类,比较特殊。
266 容器可用不同类型容器的一对迭代器进行初始化,要求元素兼容。
312 map容器下标访问时若key不存在,则添加新元素,所关联的值采用值初始化;map下
标操作返回mapped_type类型的值。
313 map容器使用insert成员可避免使用下标操作符所带来的副作用:不必要的初始化;
如果试图插入的元素所对应的键已在容器中,则insert将不做任何操作。
388 构造函数执行:1-初始化阶段(无论是否有显示初始化式),2-计算阶段。初始化规
则同变量初始化规则044。
389 对const成员、引用成员、无默认构造函数的类的成员,必须使用初始化式。
390 类类型的数据成员可用构造函数型式进行初始化。
392 一个类哪怕只定义了一个构造函数,编译器也不会再生成默认构造函数。
对于含有内置类型或复合类型成员的类,应定义默认构造函数并提供初始化式。
对于类类型成员,如果不提供初始化式,会自动调用其默认构造函数进行初始化,
这点与合成的默认构造函数相同。
每个构造函数都应该为内置类型和复合类型提供初始化式。复合类型:专指数组/指
针/引用。
定义了其他构造函数,最好提供默认构造函数。
实际上,如果定义了其他构造函数,则提供一个默认构造函数几乎总是对的。通常,
在默认构造函数中给成员提供的初始值应该指出该对象是“空”的。
393 Sales_item myobj();声明一个函数
Sales_item myobj; 定义一个对象,调用默认构造函数
Sales_item myobj = Sales_item(); 调用默认构造函数创建一个临时对象并
用它来值初始化myobj
Sales_item *p = new Sales_item; 定义一个指针
Sales_item *p = new Sales_item(); 值初始化,无必要,因同上。见151
401 static数据成员在类定义体类声明,在类定义体外(源文件)定义,定义时进行初始
化(正好一次)。
const static数据成员可以在类定义体中初始化,但仍需在类定义体外定义。
407 直接初始化(),调用构造函数;拷贝初始化=,先调用构造函数构造临时对象,然后
调用复制构造函数。
409 若不定义复制构造函数,编译器会自动合成一个,执行逐个成员初始化。
合成复制构造函数直接复制内置类型成员的值,类类型成员使用该类的复制构造函
数进行复制。
如果一个类具有数组成员,则合成复制构造函数将复制数组。复制数组时合成
复制构造函数将复制数组的每一个元素。
490 每个派生类构造函数除了初始化自己的数据成员,还有负责初始化基类的数据成员

派生类的合成默认构造函数除了初始化派生类的数据成员之外,还初始化派生类对
象的基类部分。基类部分由基类的默认构造函数初始化。
491 定义的默认构造函数隐式调用基类的默认构造函数。
派生类构造函数通过将基类包含在构造函数初始化列表中来间接初始化继承成员。
可指定全部默认实参,将上面二者合二为一 :item_base(book, sale_price),...
492 一个类只能初始化自己的(整个)直接基类,且不能初始化基类的成员或对其赋值,
以尊重基类接口的意图。
494 派生类合成操作对对象的基类部分连同派生部分的成员一起进行复制、赋值或撤销
,使用基类的复制构造函数、赋值操作符或析构函数对基类部分进行复制、赋值或撤销。
不含指针成员的类一般可以使用合成操作,含指针成员的类一般需要定义自己的复
制控制。
若派生类定义自己的复制构造函数,该函数应显式使用基类复制构造函数来初始化
基类::Base(d) 否则会自动使用默认构造函数而偏离意图。
若派生类定义自己的赋值操作符,该操作符应对基类部分显式赋值:Base::operat
or=(rhs);
若派生类定义自己的析构操作符,则编译器自动调用基类析构函数,无须程序员干
预。
535 产生模板的特定类型实例的过程称为实例化。类模板在引用实际模板类类型时实例
化,函数模板在调用它或用它对函数指针进行初始化或赋值时实例化。
581 已被抛出的对象就不能再局部存储,而是用throw表达式初始化一个称为异常对象的
特殊对象,异常对象通过复制被抛出表达式的结果创建。
c*********e
发帖数: 16335
2
新警察?

函数
指定

【在 y**b 的大作中提到】
: 以前读C++ Primer第四版中文版给自己写了个摘录,一搜索“初始化”,发现内容还很
: 庞杂,贴出来供参考,前面是页号。
: 042 两种初始化: 直接初始化(), 拷贝初始化=
: 044 变量初始化:类类型调用默认构造函数,局部内置类型不初始化,全局内置类型初
: 始化为零。
: 080 容器元素的值初始化(未指定元素的初始化式时):类类型调用默认构造函数,内置
: 类型置零。
: 097 数组元素的初始化(同变量初始化规则044):元素为类类型的数组调用默认构造函数
: ;局部内置数组不初始化,全局内置数组初始化为零。
: 117 new动态数组元素的初始化:类类型调用默认构造函数,内置类型不初始化,或指定

1 (共1页)
进入Programming版参与讨论
相关主题
*(&b1)=b编译不过,b1=b可以,区别是?还没被劝退C++的都来看看这个吧
强迫症爱好者进来做题了C++构造函数的问题
copy constructor问题。初始化列表问题
C++编程原则的问题突然想到一个老题,构造函数n多变量初始化
simple question on C++ initialization list关于构造函数的一道测试题 (转载)
刚看完类这一章,有些大小问题,请指教,谢谢[合集] 关于构造函数
请教c++数组初始化为啥gcc找不到类的构造函数?
c++类未完成初始化,如何引用this?构造函数里的异常处理
相关话题的讨论汇总
话题: 初始化话题: 构造函数话题: 默认话题: 类型话题: 基类