單定義規則(One Definition Rule):
1、在任何翻譯單元中,模板、類型、函式或對象只能有一個定義。其中一些可以有任意數量的聲明。定義提供了一個實例。
2、在整個程式中,對象或非內聯函式不能有多個定義;如果使用一個對象或函式,它必須有一個定義。您可以聲明一個從未使用過的對象或函式,在這種情況下,您不必提供定義。在任何情況下都不可能有多個定義。
3。有些東西,像type,template,和extern inline函式,可以在一個以上的編譯單元的定義。對於給定的實體,每個定義必須相同。在不同的編譯單元,非外部對象和函式是不同的實體,即使他們的名字和類型相同。
struct S; // declaration of S
S * p; // ok, no definition required
voidf(S&); // ok, no definition required
voidf(S*); // ok, no definition required
Sf(); // ok, no definition required - this is a function declaration only!
S s; // error, definition required
sizeof(S); // error, definition required
