ExpertiDict

C++ · Avançado · Inglês · Técnico

one definition rule

wʌn ˌdɛf.ɪˈnɪʃ.ən ɹuːlsubstantivo

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ções

Exemplos

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

Veja também

Todos os termos de C++