, это заставило бы это быть инициализированным значением?

я возникают проблемы с пониманием, когда и почему именно член в моем классе инициализируется нулями в соответствии сhttp://en.cppreference.com/w/cpp/language/zero_initialization.

Рассмотрим следующую тестовую программу:

#include <iostream>
#include <stdio.h>

class MyTest {
private:
    const static unsigned int dimension = 8;
    void (* myFunctions [dimension])();

public: 
    MyTest() {}

    void print() { 
        for(unsigned int i=0; i < MyTest::dimension; i++) {
            printf("myFunctions[%d] = %p\n", i, this->myFunctions[i]);
        }   
    }
};


int main() {
    //We declare and initialize an object on the stack 
    MyTest testObj = {};
    testObj.print();

    return 0;
}

Я объявляю класс, чтобы иметь массив из 8 указателей на функции подписи "void functionname ()". Когда я объявляю и инициализирую объект класса вmain какMyTest testObj = {}; или жеMyTest testObj;Я ожидал, что он будет инициализирован нулем, то есть все указатели являются нулевыми указателями.

Тем не менее, компиляция с g ++ 5.3.0 на моем компьютере с Windows 10 сg++ -m32 -o test -std=c++14 test.cpp && test Машина выдает на выходе:

myFunctions[0] = 76dd6b7d
myFunctions[1] = 00401950
myFunctions[2] = 0061ff94
myFun,ctions[3] = 004019ab
myFunctions[4] = 00401950
myFunctions[5] = 00000000
myFunctions[6] = 003cf000
myFunctions[7] = 00400080

Которые выглядят как неинициализированные значения из стека.

Если я перемещаю объявление объекта за пределы main (как глобальной переменной), оно снова печатает все нули.

Если я правильно понял cppreference, это потому, что у меня есть переменная со статической продолжительностью хранения, и поэтому она инициализируется нулями. Он инициализирует мой тип класса путем инициализации нулями всех нестатических данных-членов моего класса (т.е.myFunctions) массив. Массив инициализируется нулевой инициализацией каждого его элемента, который в моем случае с указателем на функцию является нулевым указателем.

Почему он не инициализирует нулем мой объект в стеке, когда я объявляю егоMyTest testObj = {};?

Ответы на вопрос(1)

Ваш ответ на вопрос