Почему constexpr должен быть статическим?
Nov 16 2020
Прочитав это и это, я все еще не понимаю, что такое выражения:
static constexpr int = 0;
AFAIK, в С ++:
staticобеспечивает постоянный адрес памяти на протяжении всего выполнения и безопасную инициализацию с параллельными потокамиconstexprобеспечивает оценку времени компиляции как rvalue, что означает, что у него не должно быть адреса памяти
Мне они кажутся противоречивыми. staticгарантирует, что переменная будет иметь адрес долговременной памяти, тогда как constexprгарантирует обратное предположение. Удивительно, но обсуждение в первой ссылке упоминает это:
constexpr int x = 3;
const int* p = &x;
Как мы даже можем получить адрес памяти, xесли это rvalue?
Может ли кто-нибудь объяснить это? заранее спасибо
Ответы
1 MSalters Nov 16 2020 at 17:10
staticимеет ряд значений. В классах (согласно вашему комментарию) это означает, что член связан с классом, а не с конкретным экземпляром (объектом) этого класса.
Для a constexprэто имеет большой смысл. Обычно это инициализируется значением, известным компилятору, а не аргументами ctor.