[面试] C++ 语法(一) —— 初始化列表的初始化顺序
首先来看一道经典的 C++ 面试题:
- (1)初始化列表的初始化顺序:不是按照列表的顺序进行的
- (2)初始化列表的初始化顺序:是按照内存模型中的成员变量的顺序(也即类声明的定义顺序)进行的;
- (3)也即如何为了避免出现依赖的问题:应当让参数列表和在类内的成员变量声明保持一致;
class A
{
public:A():n2(0), n1(n2+0){}void print() { cout << "n1: " << n1 << ", n2: " << n2 << endl; }
private:int n1;int n2;
};
如果在客户端:
int main(int, char**)
{A a;a.print();return 0;
}
最终输出的结果是:
n1: -858993458, n2: 0// 如前所说,初始化的顺序是由类内定义的顺序决定的// 即先初始化 n1,而 n1 由未被赋值的 n2 初始化
如果为了避免出现初始化依赖的问题,应当使初始化参数列表的顺序和类内定义的顺序保持一致,也即:
class A
{
public:A():n2(0), n1(n2+0){}void print() { cout << "n1: " << n1 << ", n2: " << n2 << endl; }
private:int n2;int n1;
};
C++ 初始化列表
[面试] C++ 语法(一) —— 初始化列表的初始化顺序相关推荐
- 28.构造函数中,成员变量一定要通过初始化列表来初始化的?
首先要明确:如果对象成员是const或者引用的话,必须将其初始化! 构造函数中,成员变量一定要通过初始化列表来初始化的的几种情况! 1)对象成员是const或者引用 #include <iost ...
- 为什么不能在子类的初始化列表里初始化父类的成员
好几次遇到此类问题了:便不得不找些资料弄明白它: 具体代码是: 2 3 4 5 6 7 8 9 10 class A { protected: int n_; }; class B : pub ...
- C++经典问题:如果对象A中有对象成员B,对象B没有默认构造函数,那么对象A必须在初始化列表中初始化对象B?
对象成员特点总结: (1)实例化对象A时,如果对象A有对象成员B,那么先执行对象B的构造函数,再执行A的构造函数. (2)如果对象A中有对象成员B,那么销毁对象A时,先执行对象A的析构函数,再执行B的 ...
- C++类构造函数初始化列表及初始化成员变量的误区
构造函数初始化列表以一个冒号开始,接着是以逗号分隔的数据成员列表,每个数据成员后面跟一个放在括号中的初始化式.例如: [cpp] view plaincopy class CExample { pub ...
- 子类初始化列表不能初始化父类元素 -- class 'Derived' does not have any field named 'x'
缘由 偶尔编写如下代码,编译出错, class Base{public:int x; };class Derived : public Base {public:Derived() : x(10) { ...
- C++必须使用【初始化列表】初始化数据成员的三种情况
类对象的构造顺序是这样的: 1.分配内存,调用构造函数时,隐式/显示的初始化各数据成员: 2.进入构造函数后在构造函数中执行一般赋值与计算. 使用初始化列表有两个原因: 原因1.必须这样做: < ...
- 构造函数中,成员变量一定要通过初始化列表来初始化的几种情况(转载)
1.参考博客 博客链接1 博客链接2 2.实例如下 class A { ... private:int a; }; class B : public A { ... private:A &aa ...
- C++成员变量初始化列表中初始化顺序
1.C++使用初始化列表初始化时,成员变量的初始化顺序:只与定义变量的顺序有关. #include <iostream> using namespace std; class A{ pri ...
- 初始化列表的初始化顺序
构造函数初始化列表仅用于初始化成员的值,并不指定这些初始化执行的次序.成员被初始化的次序就是定义成员的次序.第一个被定义的成员先被初始化,依次类推.一般,初始化的顺序无关紧要,然而,如果一个成员是根据 ...
最新文章
- 内存按字节编址,地址从A4000H到CBFFFH,共有多少个字节呢?
- Lambda表达式练习1【应用】
- deletion in request load scenario
- hdmi光端机运用于多媒体信息发布系统案例介绍
- mysql语句表名大小写敏感_Mysql 表名大小写敏感
- 视图之一--创建简单的视图
- JS 简易的计算器
- 简略讲述我的Fiddler的安转和配置过程
- 14-英伟达NVIDIA显卡驱动下载与安装
- 将pdf转换成jpg图片
- centos 下 docker 的 安装与使用 (一)
- Docker中安装并配置redis
- 大话信号与系统 --- 奇文共欣赏
- 如何计算 NP(natural product likeness)和 BCT(Bertz complexity )?
- Python 爬虫 | 获取历史涨停数据
- layui框架使用方法详解
- 《隐秘的角落》里笛卡尔的爱情故事,是真的吗?
- 【MySQL】新版本特性
- 生物信息学的发展与未来
- 青岛科技大学计算机毕业生去向,青岛科技大学好就业吗?附青岛科技大学就业率最高的专业名单...