Почему встроенные функции имеют внешнюю связь по умолчанию?

Стандарт говорит, что, учитывая объявление

inline void foo();

, что foo является встроенной функцией с внешней связью (потому что по умолчанию все объявления функций имеют внешнюю связь). Это кажется мне странным. потому что раздел 3.2 правила одного определения (как в C ++ 03, так и в C ++ 11) говорит:

3 ... Встроенная функция должна быть определена в каждой единице перевода, в которой она используется.

5 Может быть более одного определения [n] ... встроенной функции с внешней связью (7.1.2) ... Учитывая такой объект с именем D, определенный в более чем одной единице перевода ... каждое определение of D должен состоять из одной и той же последовательности токенов

. Это означает, что встроенная функция может также иметь внутреннюю связь, потому что использование функции любым способом через внешнюю связь (то есть между единицами трансляции) приведет к вызову undefined поведение (согласно пункту 3), и что содержимое встроенной функции во всех единицах перевода должно быть одинаковым.

Есть ли для этого правила обратная совместимость или конкретная причина инструментальной цепочки?

18
задан Community 23 May 2017 в 12:24
поделиться