Лучший способ инициализировать массив в списке инициализации - PullRequest
0 голосов
/ 14 мая 2018

так что давайте предположим, что у меня есть эта структура

struct CAddition {
    int x;
    int y;
    int c;
    int z[3];
    int result() { 
        return x + y; 
    }
    CAddition();
    ~CAddition();
};
CAddition::CAddition()
    :x(0)
    ,y(2)
    ,z()
    ,c(result())
{

}

и теперь в конструкторе я инициализировал z, который является членом массива структуры ,z() он выводит инициализированные значения с нулями, теперь, когда я пытаюсь использовать этот другой синтаксис

,z{} 

и

,z{0,0,0}

все они выдают один и тот же результат Есть ли более эффективный способ инициализации массива в конструкторе, кроме двух вышеупомянутых, и есть ли разница в 3 методах, я проверил разные сайты для инициализации, они использовали оба метода

Ответы [ 2 ]

0 голосов
/ 14 мая 2018

Если под «более эффективным способом» вы подразумеваете, что на создание CAddition уходит меньше времени, то нет.

Самый быстрый способ создать CAddition - инициализировать массив всеми нулями, что является поведением по умолчанию.

Это займет незначительное количество времени для массива из 3 элементов, но это может занять много времени, если размер массива очень велик, и в этом случае вам будет лучше использовать std::vector и reserve вместо этого немного места.

0 голосов
/ 14 мая 2018

Если вы хотите инициализировать все элементы в массиве со значением по умолчанию 0, использование z {0} очень быстро.Или, если вы хотите инициализировать значением -1, вы можете использовать memset ():

CAddition::CAddition()
:x(0)
,y(2)
,c(result())
{
   memset(z, -1, 3 * sizeof(int));
}

Обратите внимание, что memset () работает с байтами, а не с числом.Если вам нужно заполнить массив числом, вы можете вместо этого использовать fill_n ().

...