Por que devo preferir constexpr estático int em uma classe ao invés de enum para constantes integrais no nível de classe?
Atualização do C ++ 17: static constexpr
variáveis são implicitamenteinline
então não há definição externa necessária.
Pergunta original:
Digamos que eu tenha uma lista de constantes como
struct Cls {
static constexpr int N = 32;
static constexpr int M = 64;
};
É claro que isso sugere que eu adicione definições para evitar problemas de uso de ODR que possam ocorrer, por isso preciso:
constexpr int Cls::N;
constexpr int Cls::M;
Por quêdevemos Eu prefiro isso
struct Cls {
enum : int {
N = 32,
M = 64
};
};
O que me salva das dores de cabeça por uso de ODR desdeN
eM
são mais constantes e não objetos por si só (um negócio maior, se for somente de cabeçalho) e é mais curto. Eu poderia especificar explicitamente o tipoenum : long long
ou o que for necessário. Qual é a vantagem do primeiro?