Я не могу понять цель пометки функции-установщика как constexpr
, что разрешено начиная с С++ 14. Мое недопонимание исходит из следующей ситуации: я объявляю класс с c-tor constexpr и собираюсь использовать его в контексте constexpr, создав экземпляр constexpr этого класса constexpr Point p1
. Объект p1
теперь является постоянным, и его значение не может быть изменено, поэтому не может быть вызван установщик constexpr
. С другой стороны, когда я создаю экземпляр моего class Point
в Point p
контекста non-constexpr, я могу вызвать установщик для этого объекта, но теперь установщик не будет выполняться во время компиляции, потому что объект не является constexpr!
В результате я не понимаю, как я могу повысить производительность своего кода, используя constexpr
для сеттеров.
Этот код демонстрирует вызов установщика constexpr для объекта не-constexpr, что означает вычисление во время выполнения вместо времени компиляции:
class Point {
public:
constexpr Point(int a, int b)
: x(a), y(b) {}
constexpr int getX() const noexcept { return x; }
constexpr int getY() const noexcept { return y; }
constexpr void setX(int newX) noexcept { x = newX; }
constexpr void setY(int newY) noexcept { y = newY; }
private:
int x;
int y;
};
int main() {
Point p{4, 2};
constexpr Point p1{4, 2};
p.setX(2);
}
Может ли кто-нибудь помочь мне понять, какова цель маркировки функции сеттера как constexpr
?