Можно ли установить конкретный член массива со списком инициализации в C ++? - PullRequest
0 голосов
/ 25 июня 2018

Я знаю, что вы можете инициализировать весь массив с помощью списка инициализации следующим образом:

struct s {
    int a[1];
    s (int b): a{b}{}
};

, но возможно ли установить значение одного конкретного члена? Потому что это:

struct s {
    int a[1];
    s (int b): a[0]{}
};

не работает и выдает две ошибки:

expected '(' before '[' token  

и

expected '{' before '[' token.

Ответы [ 2 ]

0 голосов
/ 25 июня 2018

Нет. Только инициализация специализированных элементов массива поддерживается в C, но не в C ++.

Примечание: ... и назначенная инициализация массивов все поддерживаются в языке программирования C, но не разрешены в C ++.

int arr[3] = {[1] = 5};        // valid C, invalid C++ (array)

Вы можете использовать назначение в качестве обходного пути.

struct s {
    int a[1];
    s (int b) { a[0] = b; }
};
0 голосов
/ 25 июня 2018

Вы можете инициализировать элемент массива, поместив значение в соответствующую позицию с помощью совокупной инициализации .

struct s {
    int a[2];
    s (int b): a{b, 0} {} // sets a[0] with the value of b
                          // a[1] is set to zero
};

s foo(1);  
std::cout << foo.a[0] << " " << foo.a[1]; // 1 0

ОБНОВЛЕНИЕ (спасибо @NathanOliver)

Недостающие элементы инициализируются нулями .

struct s {
    int a[2];
    s (int b): a{b} {} // a[1] is already 0
};
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...