Когда я запустил статический анализатор кода QACPP, я получил предупреждение. Согласно документации QACPP, инициализация с {0}
работает только для встроенных типов. Для инициализации массива объектов типа A
необходимо использовать {}
. Как показано ниже:
int i[5] = {0}; // Only works with built-in types.
A a[5] = {}; // OK, works with both built-in and class types
Это стандартное правило C ++? В соответствии с этим, массив указателей на тип класса также должен быть инициализирован с {}
, верно?
Имеет ли это утверждение:
A* ap[5] = {}
инициализировать 5 указателей с помощью NULL
?
QACPP выдает мне предупреждение, когда я использую A* ap[5] = {NULL}
, хотя код компилируется и работает отлично даже в противном случае.
Дополнительный
Я думаю, что предупреждение было больше, потому что массив является статическим.
А вот объяснение, которое я нашел в документации:
Есть много проблем с использованием
объектов со статическим хранилищем
продолжительность, особенно заявленные
вне функций. Если много
функции могут получить доступ к статическому объекту
эта ситуация может стать трудной
поддерживать. Кроме того, в случае
многопоточные приложения становится
необходимо защитить мьютексом каждый
статический объект, к которому можно получить доступ
одновременно. Поэтому это хороший
Идея ограничить объем статического
объект как можно больше, так что
Вы знаете, где находится такой объект
доступ.
Пространство имен или объекты класса со статическим
продолжительность хранения будет инициализирована
в начале программы, до
вызов main () и порядок
инициализация не указана.
Опора на порядок
инициализация может привести к объектам
используется, прежде чем они
инициализирован. Если выдается исключение
в результате инициализации
нелокальный объект программа будет
немедленно прекратить.
Блокировать объекты области видимости со статическим
продолжительность хранения будет инициализирована
когда функция впервые вызывается.
Поэтому лучше всего использовать
шаблон синглтона вместо пространства имен
объекты и статические члены данных. это
влечет за собой оборачивание объекта в
функционировать как локальный статический объект, и
имея функцию, возвращающую ссылку
к этому объекту.