Есть ли легкий пример из реальной жизни, когда нет альтернативы constexpr? - PullRequest
0 голосов
/ 15 марта 2020

Есть ли легкий пример из реальной жизни, когда нет альтернативы для constexpr?

Ответы [ 2 ]

1 голос
/ 15 марта 2020

Функция, используемая в case, должна быть constexpr. Пример:

switch(hashfunc(input)) {
case hashfunc("hello"):
    std::cout << "world\n";
    break;
}
0 голосов
/ 15 марта 2020

Когда следующий код скомпилирован с оптимизацией:

struct A { 
    int a_; 
    A(int a) : a_(a) {}
};

struct B { 
    int a_; 
    constexpr B(int a) : a_(a) {}
};

A a{1};
B b{1};

gcc генерирует код, который вызывает конструктор A для глобальной переменной a, поскольку конструктор A не является constexpr. Принимая во внимание, что нет никакого вызова к конструктору B для инициализации переменной b.

clang, однако в обоих случаях исключает вызов к конструктору.

Сгенерированный код .

...