成员变量的初始化顺序与变量在类型中的申明顺序相同,而与它们在构造函数的初始化列表中的顺序无关
2012-11-16 16:30
337 查看
From: http://zhedahht.blog.163.com/blog/static/2541117420111169592105/
题目(12):运行下图中的C++代码,输出是什么?
#include
<iostream>
class A
{
private:
int n1;
int n2;
public:
A(): n2(0), n1(n2 + 2)
{
}
void Print()
{
std::cout <<
"n1: " << n1 << ", n2: " << n2 << std::endl;
}
};
int _tmain(int argc, _TCHAR* argv[])
{
A a;
a.Print();
return 0;
}
答案:输出n1是一个随机的数字,n2为0。在C++中,成员变量的初始化顺序与变量在类型中的申明顺序相同,而与它们在构造函数的初始化列表中的顺序无关。因此在这道题中,会首先初始化n1,而初始n1的参数n2还没有初始化,是一个随机值,因此n1就是一个随机值。初始化n2时,根据参数0对其初始化,故n2=0。
题目(12):运行下图中的C++代码,输出是什么?
#include
<iostream>
class A
{
private:
int n1;
int n2;
public:
A(): n2(0), n1(n2 + 2)
{
}
void Print()
{
std::cout <<
"n1: " << n1 << ", n2: " << n2 << std::endl;
}
};
int _tmain(int argc, _TCHAR* argv[])
{
A a;
a.Print();
return 0;
}
答案:输出n1是一个随机的数字,n2为0。在C++中,成员变量的初始化顺序与变量在类型中的申明顺序相同,而与它们在构造函数的初始化列表中的顺序无关。因此在这道题中,会首先初始化n1,而初始n1的参数n2还没有初始化,是一个随机值,因此n1就是一个随机值。初始化n2时,根据参数0对其初始化,故n2=0。
相关文章推荐
- 构造函数初始化列表中成员列出顺序要和它们在类中声明顺序相同
- 初始化列表中成员列出的顺序和它们在类中声明的顺序相同
- Effective C++学习笔记:初始化列表中成员列出的顺序和它们在类中声明的顺序相同
- 类的成员变量 声明顺序 决定 初始化顺序(构造函数初始化列表不影响)
- 条款13: 初始化列表中成员列出的顺序和它们在类中声明的顺序相同
- 条款13: 初始化列表中成员列出的顺序和它们在类中声明的顺序相同
- Effective C++学习笔记:初始化列表中成员列出的顺序和它们在类中声明的顺序相同
- effective C++笔记之条款13: 初始化列表中成员列出的顺序和它们在类中声明的顺序相同
- c++中什么类型的成员变量只能在构造函数的初始化列表中进行
- 条款 13: 初始化列表中成员列出的顺序和它们在类中声明的顺序相同
- Effective c++ 条款13: 初始化列表中成员列出的顺序和它们在类中声明的顺序相同
- 条款十三: 初始化列表中成员列出的顺序和它们在类中声明的顺序相同
- C++成员变量的初始化顺序如果不使用初始化列表初始化,在构造函数内初始化时,此时与成员变量在构造函数中的位置有关。
- Effective C++学习笔记:初始化列表中成员列出的顺序和它们在类中声明的顺序相同
- C++成员变量初始化列表和变量初始化顺序
- 在初始化列表中,成员变量的初始化顺序是其在类中声明顺序,而非列表中的顺序。
- C++ 通过初始化列表和构造函数内赋值初始化成员变量的区别
- C++中使用初始化列表比在构造函数中对成员变量赋值更高效
- C/C++ 通过初始化列表和构造函数内赋值初始化成员变量的区别
- 构造函数中,哪些成员变量一定要通过初始化列表来初始化