That rather depends. If the number of options is small, then use several bool members to represent them. If the list grows large, then both your options become viable:
- a bitset (which an appropriate
enum to symbolically represent the options) takes a constant, and very small, amount of space, and getting a certain option takes O(1) time;
- a list of options, or rather an
std::set or unordered_set of them, might be more space-efficient, but only if the number of options is huge, and it is expected that a very small number of them will be set per object.
When in doubt, use either a bunch of bool members, or a bitset. Only if profiling shows that storing options becomes a burden, consider a dynamic list or set representation (and even then, you might want to reconsider your design).
Edit: with less than 256 options, a bitset would take at most 64 bytes, which will definitely beat any list or set representation in terms of memory and likely speed. A bunch of bools, or even an array of unsigned char, might still be faster because accessing a byte is commonly faster than accessing a bit. But copying the structure will be slower, so try several options and measure the result. YMMV.