📜  C++中初始化程序列表中的执行顺序

📅  最后修改于: 2021-05-30 13:02:29             🧑  作者: Mango

先决条件:类,构造函数,初始化列表

在本文中,我们将讨论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等的更多准备工作,请参阅“完整面试准备课程”