Создание экземпляра структуры с частными полями [duplicate]

Наличие ведущего NA немного морщин, но я считаю очень читаемым (и векторизованным) способом LOCF, когда главный член not отсутствует:

na.omit(y)[cumsum(!is.na(y))]

В целом работает немного менее читаемая модификация:

c(NA, na.omit(y))[cumsum(!is.na(y))+1]

дает желаемый результат:

c(NA, 2, 2, 2, 2, 3, 3, 4, 4, 4)

1
задан Daniel Robertson 20 December 2015 в 02:08
поделиться

2 ответа

Стандартная библиотека определяет пару функций для работы с инициализацией. Они являются общими, поэтому их можно использовать для инициализации значений любого типа.

Во-первых, есть std::mem::uninitialized() , что дает вам неинициализированное значение. LLVM будет считать содержимое неопределенным и будет выполнять агрессивные оптимизации на основе этого. Вы должны инициализировать любое значение перед его чтением.

Во-вторых, есть std::mem::zeroed() , который дает вам значение, чье хранилище заполнено нулями. Эта функция unsafe, потому что такое значение не обязательно является законным для всех типов. zeroed() подходит для типов «простых старых данных» (POD).

3
ответ дан Francis Gagné 19 August 2018 в 10:52
поделиться

Как насчет использования mem::zeroed? Документы ( https://doc.rust-lang.org/std/mem/fn.zeroed.html ) даже говорят:

Это полезно для FFI функции иногда, но обычно их следует избегать.

1
ответ дан John Zwinck 19 August 2018 в 10:52
поделиться
Другие вопросы по тегам:

Похожие вопросы: