Недавно я использовал constexpr, но только что понял, что использовал его неправильно. Мне любопытно, могу ли я создать переменную времени компиляции (или объект переменной).
Определение constexpr из cppreference.com сообщает нам:
Спецификатор constexpr заявляет, что можно оценить значение функции или переменной во время компиляции.
Так почему же следующий код неверен?
#include <iostream>
int main()
{
constexpr int x = 30;
x += 10;
std::cout << x;
}
Это целое число может быть отлично вычислено во время компиляции. Я знаю, что компиляторы могут оптимизировать такую переменную без модификатора constexpr, но что, если я хочу иметь объект времени компиляции?
#include <iostream>
class ctFoo {
public:
ctFoo()
: value{ 0 }
{
}
int accumulate(int value_) {
return (value += value_), value;
}
int value;
};
int main()
{
ctFoo foo;
std::cout << foo.accumulate(100);
}
Насколько я уверен, что этот код будет оценен во время компиляции? Я спрашиваю об этом, потому что в настоящее время я пишу математику Vector2 и Vector3, и я хотел создать такую реализацию, которая сможет обрабатывать вычисления во время компиляции и выполнения. Возможно ли такое?
Спасибо.
Редактировать
Как указал max66, constexpr подразумевает const, но я спрашиваю: почему так? Современные компиляторы должны уметь определять его значение во время компиляции. Кроме того, я знаю, что могу просто создать другую константу constexpr (ad. Top-most code example), но мой вопрос относится к более сложному коду.
const
вconstexpr
- person max66   schedule 06.01.2018