Background
Указатели нельзя использовать в качестве параметров значения T* p для шаблона (который специализирован во время компиляции), поскольку адрес памяти &obj некоторого объекта T obj известен только во время выполнения.
Вопрос
Если этот фон верен, то как может указатель использоваться во время компиляции, а не быть некорректным:
Background Указатели нельзя использовать в качестве параметров значения T* p для шаблона (который специализирован во время компиляции), поскольку адрес памяти &obj некоторого объекта T obj известен только во время выполнения. Вопрос Если этот фон верен, то как может указатель использоваться во время компиляции, а не быть некорректным: [code]constexpr size_t length(const char* str) { size_t n = 0; while (str[n] != '\0') { n++; } return n; }
//...
constexpr size_t length = length("Monkey types Hamlet!"); [/code] На какую память на самом деле указывает str во время компиляции?
Я просматривал темы constexpr и consteval и нашел следующее:
У нас могут быть указатели типа CONSTEXPR Функция CONSTEVAL может возвращать указатель на переменную CONSTEXPR.
И мой вопрос заключается в следующем: как возможно то, что описано выше?...
Я просматривал темы constexpr и consteval и нашел следующее:
У нас могут быть указатели типа CONSTEXPR Функция CONSTEVAL может возвращать указатель на переменную CONSTEXPR.
И мой вопрос заключается в следующем: как возможно то, что описано выше?...
Когда я играл с функцией constexpr, я столкнулся со следующей проблемой.
Доступ к неактивному члену объединения — это неопределенное поведение, которое я знаю. Но из этого правила есть одно исключение.
Согласно стандарту C++23 /26,