обе ссылки не упоминают, являются ли переменные inline
встроенными в том смысле, что они могут быть встроены компилятором так же, как встроенные функции.
Скорее всего, это связано с тем, чтонет причин упоминать такую вещь. Вы основываете свои ожидания на ложной предпосылке. Ключевое слово inline
не имеет отношения к тому, может ли функция быть встроенной компилятором. Компилятор может выбрать встроенные функции, не отмеченные inline
, и он может отключить встроенные функции, отмеченные inline
. Это имело место с самого начала, даже когда впервые было введено ключевое слово inline
.
Было время, когда ключевое слово inline
было подсказкой для компилятора, но даже тогда это была только подсказка. Компилятор всегда был свободен принимать собственные решения о том, какие функции встроить. С тех пор компиляторы стали лучше, чем программисты, когда речь заходит о том, какие функции эффективно встроить. Поэтому большинство современных компиляторов игнорируют предполагаемую подсказку (при полной оптимизации).
, которая заменяется фактическим значением на сайте вызова.
Это невозможно сделать в целом. Вызов функции может быть заменен на содержимое функции (ее тело) компилятором, потому что компилятор знает, что такое содержимое функции. Напротив, содержимое переменной (ее значение) не известно компилятору. Это, в конце концов, часто смысл объявления переменной. Поскольку компилятор не знает «фактическое значение», у компилятора нет способа использовать это значение в качестве замены для извлечения значения из местоположения переменной в памяти.
Однако это можно сделать,в конкретном случае, когда компилятор может определить, каким будет значение переменной. Как и в случае с функциями, компилятор должен решить, использовать ли это значение непосредственно в машинных инструкциях или извлечь это значение из ячейки памяти переменной. Использование ключевых слов не имеет отношения к этому решению (хотя при полной оптимизации, я бы ожидал, что значение будет использоваться, пока оно вписывается в регистр). Единственное релевантное ключевое слово - constexpr
, что значительно упрощает компилятору вывод значения переменной.