Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

const constexpr char* vs. constexpr char*

Tags:

c++

c++11

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

like image 794
Brandon Avatar asked May 31 '15 18:05

Brandon


1 Answers

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.

like image 190
David Grayson Avatar answered Sep 20 '22 11:09

David Grayson