I know the difference between const and constexpr. One is a compile time constant and the other is either compile time or runtime constant.
However, for array of chars/strings, I'm confused why the compiler complains about one being used over the other.
For example I have:
constexpr char* A[2] = {"....", "....."};
const constexpr char* B[2] = {"....", "....."};
With declaration "A" I get:
ISO C++ forbids converting a string constant to 'char*' [-Wwrite-strings]
but with declaration "B" I get no warnings.
Why does the extra const qualifier get rid of the warning? Aren't both of them "const char*" anyway? I ask because both are declared with constexpr
which should make it a const char*
by default?
I'd expect A to be fine :S
const
tells the compiler that the chars you are pointing to should not be written to.
constexpr
tells the compiler that the pointers you are storing in those arrays can be totally evaluated at compile time. However, it doesn't say whether the chars that the pointers are pointing to might change.
By the way, another way you could write this code would be:
const char * const B[2];
The first const
applies to the chars, and the second const
applied to the array itself and the pointers it contains.
If you love us? You can donate to us via Paypal or buy me a coffee so we can maintain and grow! Thank you!
Donate Us With