What is the difference between "constexpr" and macros in C++? What are the pros and cons of each?