C++ · Avançado · Inglês · Técnico
one definition rule
Regra que exige exatamente uma definição para cada função ou variável não inline no programa, e definições idênticas de classes e inline em todas as unidades de tradução.
Onde usar
Quebrada, gera erro de definição múltipla no linker ou, pior, comportamento indefinido silencioso quando duas definições diferentes da mesma classe se misturam. Em headers, resolve-se com inline ou templates.
Em código
// util.h, incluído em vários .cpp
int dobro(int x) { return 2 * x; }
// link: multiple definition of `dobro(int)'
inline int triplo(int x) { return 3 * x; }
// ok: inline permite várias definiçõesExemplos
Defining the function in the header broke the ODR.
Definir a função no header quebrou a ODR.
Two different structs named Config caused an ODR violation.
Duas structs diferentes chamadas Config causaram violação da ODR.
Cuidado
Violações entre unidades de tradução não precisam ser diagnosticadas pelo compilador, então o programa pode compilar e linkar sem aviso.
Sinônimos
ODR, regra de uma definição