有没有办法在C ++中将变量的值设置为空?

时间:2020-08-03 18:00:16

标签: c++ nonetype

我有一个程序,可以根据输入来打印语句。打印语句使用所有输入进行打印,但我只希望它打印实际给出的输入。例如:

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

(出于演示的目的,上面的变量是任意的,这只是为了说明要点)

因此,每次循环迭代后都会调用此print语句。值可以是任何值,但是如果没有收到值,我不希望它打印。理想情况下,将这样做:

// 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 个答案:

答案 0 :(得分:1)

如果您具有C ++ 17或更高版本,请参见optional。在此之前,您需要将您的类型包装到适当的supervisord中,以模仿可选方法的作用(可以在网上找到各种实现,例如https://github.com/TartanLlama/optional)。

在您的示例中,您可以执行以下操作:

struct

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默认是无效的(请参见https://en.cppreference.com/w/cpp/utility/optional/optional)。