Как заменить аргумент int* по умолчанию и изменить его в современном C++?C++

Программы на C++. Форум разработчиков
Ответить
Anonymous
 Как заменить аргумент int* по умолчанию и изменить его в современном C++?

Сообщение Anonymous »

Я рассматриваю некоторый код C++, который в настоящее время передает массив int*, который может иметь значение null, и выполняет некоторую логику. Допустим, он имеет следующий вид:

Код: Выделить всё

void modifyArray(int* arr = nullptr) {
if (arr) {
*arr += 10;
}
}
Я знаю, что это чревато утечками памяти, и пытаюсь заменить его современными концепциями C++. Насколько я понимаю, лучше всего было бы:
  • использовать std::array вместо int*
  • передача по ссылке, чтобы избежать копирования
  • с использованием std::optional, чтобы предотвратить использование, когда оно пустое
У меня возникли проблемы с реализацией этой концепции. Я попробовал что-то вроде следующего (точная логика не важна):

Код: Выделить всё

void modifyArray(std::optional& optArr = std::nullopt) {
if (optArr) {
for (auto& element : optArr.value()) {
element += 10;
}
}
}
Но он не компилируется, поскольку std::nullopt является константой (

Код: Выделить всё

Non-const lvalue reference to type 'std::optional' cannot bind to a value of unrelated type 'const nullopt_t'
).
Я еще не нашел способа реализовать все вышеперечисленное вместе. Это жизнеспособно?

Подробнее здесь: https://stackoverflow.com/questions/793 ... n-modern-c
Ответить

Быстрый ответ

Изменение регистра текста: 
Смайлики
:) :( :oops: :roll: :wink: :muza: :clever: :sorry: :angel: :read: *x)
Ещё смайлики…
   
К этому ответу прикреплено по крайней мере одно вложение.

Если вы не хотите добавлять вложения, оставьте поля пустыми.

Максимально разрешённый размер вложения: 15 МБ.

Вернуться в «C++»