I need to make an optional argument with a default value in my function. Currently the signature looks something like this:
void func(int a, std::optional<int> b = 10)
and the function behaves in the following way:
func(15, 5); // works
func(15); // works
The question is: If I remove the explicit initialization for the optional argument, like this:
void func(int a, std::optional<int> b)
Then It seems like the signature of the function changes
func(15, 5); // works
func(15); // fails
Which makes me very confused about the purpose of the std::optional
in the first place. What is it good for if not for creating optional arguments?
What is it good for if not for creating optional arguments?
std::optional
is not supposed to be used for optional argument what you expect; which requires default argument as your 1st code sample showed, std::optional
won't change the language syntax.
The class template
std::optional
manages an optional contained value, i.e. a value that may or may not be present.
You can used it like
void func(int a, std::optional<int> b = std::nullopt) {
if (b) {
// if b contains a value
...
} else {
...
}
}
then
func(15, 5); // b will contain a value (i.e. `5`)
func(15); // b doesn't contain a value