I understood that we can use both options below to change the boolalpha flag, but why do we need to qualify ios_base in the setf() function and can't use std::boolalpha within the function parameter?
std::cout << std::boolalpha; //using manipulator
std::cout.setf(ios_base::boolalpha); // we can't use std::cout.setf(std::boolalpha);
CodePudding user response:
std::boolalpha is a stream function object (also known as a manipulator) that sets the boolalpha flag on a stream. This flag causes boolean values to be written out as "true" or "false" rather than as "1" or "0".
The setf() function is a member function of the std::ios_base class, which is the base class for all stream classes. The setf() function is used to set various formatting flags on a stream, including the boolalpha flag. The first argument to setf() is an enumeration value that specifies which flag to set.
In this case, ios_base::boolalpha is the enumeration value that represents the boolalpha flag, so std::cout.setf(ios_base::boolalpha) sets the boolalpha flag on the std::cout stream.
The reason you can't use std::boolalpha within the function parameter, is that std::boolalpha is a manipulator, and setf() expects the enumeration type as its argument, not a manipulator.
Additionally, a manipulator can be used to simply change the flag, unlike setf() that is meant to be used as a more powerful and general set of operations.
