Си++: различия между версиями
Содержимое удалено Содержимое добавлено
Qraizer (обсуждение | вклад) |
Qraizer (обсуждение | вклад) |
||
Строка 88:
Встроенные функции обладают всеми достоинствами функций, которых лишены макросы: они приводят к типу, они знают об области видимости, они могут содержать условные операторы, они могут быть (см. ниже) перегруженными, или функциями-членами, или членами пространств имён, или функциями-друзьями, или задаваться шаблонами, или быть параметрами шаблонов. Макросам всё это недоступно.
Даже более, Стандарт чётко требует от компиляторов, чтобы программисту не требовалось задумываться на тему "а что, если вдруг", т.к. семантика программы, независимо от того, встраивается ли какая-либо функция или нет, оставалась неизменной. Поэтому, например, если в <tt>inline</tt>-функции присутствуют локальные <tt>static</tt>-переменные с неконстантным выражением инициализации, то соблюсти единственность и своевременность этой инициализации независимо от того, какое именно встраивание этой функции будет выполнено первым после запуска программы
И в то же, несмотря ни на что, время тело встроенной функции, подобно макросу, пишется там же, где её заголовок; обычно это заголовочный файл. Так, например, <font color=red>неправильно, если sqr.h включается более чем в одном cpp-шнике</font>, а потому так писать <font color=red>очень нежелательно</font>:
|