
If this is not an appropriate list for this question, please let me know. The books tell me to prefer const to #defines -- but where do you put them to have the right scope and not take up space in the object? What I'd like to have is: class register { void set_mask() { reg |= mask; } private: uint64_t reg; const uint64_t mask = 0x12345678; }; But the compiler will not let me do this and even if it did,the mask would take up physical space. I don't want mask (or reg) to be visable outside of the class and I want the compiler to use mask as a compile time constant that does not consume space after the compile. I vaguely know about namespace but if I put this inside a namespace, then I have to do: namespace hardware { const mask = 0x12345678; class register { void set_mask() { reg |= mask; } private: uint64_t reg; }; }; // .. define a register hardware::register doddy; and "mask" is not really private -- just obscured. I can still do: int i = hardware::mask; This just feels like I've taken a wrong turn somewhere. How would this be "properly" done? Thanks, Perry