成员初始化表的执行顺序与顺写顺序无关

简介: 成员初始化表的执行顺序与顺写顺序无关

成员初始化表的执行顺序与速写顺序无关

首先给出结论,c++的成员初始化表的初始化,顺序与没有关系,有关系的是构造函数中,变量书写的顺序,越上面的越先初始化。

演示代码:

#include<bits/stdc++.h>  
using namespace std;  
class Student
{
  int age;
  int year;
  int birthYear;
  public:Student(int,int);   
};  
Student::Student(int x ,int y): year(x), birthYear(y),age(year - birthYear) 
{
  cout<<"age = "<<age<<endl;
  cout<<"year = "<<year<<endl;
  cout<<"birthYear = "<<birthYear<<endl;
  /*
  age = 0         // 运行结果age这里为0,因为按照构造函数的顺序,
          // age在上面,应该是age先初始化,所以age(year-birthYear)先运行,
          // 但是这个时候,year,birthYear都还没有初始化,默认为0,所以age最后为0
  year = 2014
  birthYear = 1976
  */
}
int main()
{
    Student* p = new Student (2014,1976);
    delete p;   
    return 0;
}

正确写法:

#include<bits/stdc++.h>  
using namespace std;  
class Student
{
  int year;
  int birthYear;
  int age;
  public:Student(int,int);   
};  
Student::Student(int x ,int y): year(x), birthYear(y),age(year - birthYear) 
{
  cout<<"age = "<<age<<endl;
  cout<<"year = "<<year<<endl;
  cout<<"birthYear = "<<birthYear<<endl;
}
int main()
{
    Student* p = new Student (2014,1976);
    delete p;   
    return 0;
}
相关文章
|
5月前
|
jenkins Java 持续交付
一篇文章讲明白JenkinsPipelinescript指令创建和变量定义
一篇文章讲明白JenkinsPipelinescript指令创建和变量定义
258 0
|
监控 安全 网络安全
CWPP与EDR的定义与区别
随着信息系统的发展,大家都在说网络安全要覆盖“云”、“管”、“端”,CWPP与EDR是目前非常火的产品,一个面向云端服务器的防护,一个是面向常规终端PC端的防护。
2109 0
|
缓存 IDE API
C#反射与特性(五):主类型成员操作
C#反射与特性(五):主类型成员操作
387 0
C#反射与特性(五):主类型成员操作
|
C语言
C语言函数和指针的关系之二(未完)
C语言函数和指针的关系之二(未完)
47 0
|
前端开发
前端学习案例3-this指向问题-隐式调用规则
前端学习案例3-this指向问题-隐式调用规则
75 0
前端学习案例3-this指向问题-隐式调用规则
|
前端开发
前端学习案例4-this指向问题-隐式调用规则2
前端学习案例4-this指向问题-隐式调用规则2
73 0
前端学习案例4-this指向问题-隐式调用规则2
|
存储 编译器 程序员
C++数据定义及相关操作
C++数据定义及相关操作
140 0
C++数据定义及相关操作
java基础学习 数组,循环,变量,函数加载情况先后顺序,方法定义
java基础学习 数组,循环,变量,函数加载情况先后顺序,方法定义
java基础学习 数组,循环,变量,函数加载情况先后顺序,方法定义
C结构中包含自己的嵌套定义
C结构中包含自己的嵌套定义
67 0
运算符优先顺序(包含类型说明)
运算符优先顺序(包含类型说明)
177 0
运算符优先顺序(包含类型说明)