Есть ли способ установить значение переменной как пустое в C ++? - PullRequest
0 голосов
/ 03 августа 2020

У меня есть программа, которая печатает инструкцию на основе входных данных. Оператор печати печатает, используя все входные данные, но я хочу, чтобы он печатал только те входные данные, которые фактически заданы. Например:

std::cout << "-Number: " << number < "-Letter: " << letter << "-String: " << str << "-Sum: " << sum << std::endl; 

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

Таким образом, этот оператор печати вызывается после каждой итерации al oop. Значения могут быть любыми, но я не хочу, чтобы они печатались, если значение не было получено. В идеале это должно быть сделано так:

// Get input... Then print statement... 
// If input was not received for a value (i.e. it equals none) then skip that value
std::cout << "-Number: " << number < "-Letter: " << letter << "-String: " << str << "-Sum: " << sum << std::endl; 
number = none, letter = none, str = none, sum = none // reset inputs and repeat loop

(еще раз, это псевдокод для демонстрации)

Возможно ли это в C ++?

1 Ответ

1 голос
/ 03 августа 2020

Если у вас C ++ 17 или более поздняя версия, см. необязательно . До этого вам нужно было бы обернуть свой тип в правильный struct, который имитировал бы c то, что делает optional (из которых вы можете найти различные реализации на net, например https://github.com/TartanLlama/optional

В вашем примере вы можете сделать:

std::optional<int> number;

// Puts a value inside number
if (some condition)
    number.value() = 44;
// Set number to invalid
else number.reset();

std::cout << "Number: " << (number ? number.value() : "Some Default Value You want to Show" << std::endl;

std::optional имеет operator bool(), который сообщает вам, правильно ли вы указали значение в вашем std::optional. Также обратите внимание, что ваш std::optional недействителен по умолчанию, если вы вызываете конструктор по умолчанию (см. https://en.cppreference.com/w/cpp/utility/optional/optional).

...