先决条件:类,构造函数,初始化列表
在本文中,我们将讨论C++中初始化程序列表中的执行顺序。通常,执行顺序是从上到下,从左到右。但是,当在类中使用初始化程序列表时,此规则失败的情况很少发生。在初始化列表中,执行顺序根据成员变量的声明顺序进行。在C++中为类使用初始化列表时,成员变量的声明顺序会影响程序的输出。
程序1:
C++
// C++ program to illustrate the
// order of initializer in list
#include
using namespace std;
class MyClass {
private:
// Declared first
int b;
// Declared Second
int a;
public:
MyClass(int value)
: b(value), a(b * 2)
{
cout << b << " " << a;
}
};
// Driver Code
int main()
{
// Create an object
MyClass obj(10);
return 0;
}
C++
// C++ program to illustrate the
// order of initializer in list
#include
using namespace std;
class MyClass {
private:
// Declared first
int a;
// Declared Second
int b;
public:
MyClass(int value)
: b(value), a(b * 2)
{
cout << b << " " << a;
}
};
int main()
{
// Create an object
MyClass obj(10);
return 0;
}
输出:
10 20
程式2:
C++
// C++ program to illustrate the
// order of initializer in list
#include
using namespace std;
class MyClass {
private:
// Declared first
int a;
// Declared Second
int b;
public:
MyClass(int value)
: b(value), a(b * 2)
{
cout << b << " " << a;
}
};
int main()
{
// Create an object
MyClass obj(10);
return 0;
}
输出:
10 65528
这两个输出是不同的,因为执行是根据声明的顺序进行的:
- 在第一个程序,b为第一声明的,所以B被分配的10的值,然后被声明,一个以后分配的b * 2。因此,输出为10 20。
- 在第二个方案中,在第一和然后是b声明。因此,首先,为a分配b * 2,但是b尚未初始化。因此,一些垃圾值被分配到一个。后面的b被赋值为10。
要从最佳影片策划和实践问题去学习,检查了C++基础课程为基础,以先进的C++和C++ STL课程基础加上STL。要完成从学习语言到DS Algo等的更多准备工作,请参阅“完整面试准备课程” 。