Flaga jest to po prostu zmienna.
Załóżmy, że masz funkcję:
int* returnNumbers(int from, int to)
{
//Blahblah
}
I załóżmy, że chcesz, aby zwróciło tylko liczby parzyste. Po co tworzyć drugą funkcję do zwracania tylko liczb parzystych, skoro można to oznaczyć flagą?
int* returnNumbers(int from, int to, bool onlyEven)
{
//Blahblah
}
A potem przy wywołaniu funkcji:
bool onlyEven = true;
int *numbers = returnNumbers (10, 20, onlyEven);
Często jest spotykane pakowanie flag w jednego integera:
// 0x01 == 1 == "00000001"
// 0x02 == 2 == "00000010"
// 0x04 == 4 == "00000100"
// 0x08 == 8 == "00001000"
// 0x10 == 16 == "00010000"
// 0x20 == 32 == "00100000"
// 0x40 == 64 == "01000000"
// 0x80 == 128 == "10000000"
Jeśli spojrzysz na bity, to możesz w bardzo prosty sposób upakować bardzo dużo flag w jednym integerze. Pozdrawiam!