Как заменить аргумент 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

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