2016-01-01 4 views
2

Итак, вопрос в том, указывает ли последний стандарт, когда функция в стандартной библиотеке C++ объявлена ​​встроенной или нет?Указывает ли стандарт, какие функции объявлены встроенными?

Глядя на заголовочный файл algorithm из реализаций Clang, GCC и MSVC, каждая отдельная функция, за исключением тех, которые являются constexpr, объявлены inline.

Я собирался продолжить и спросить, когда встраивать, а что нет, но я не хочу иметь обычный аргумент о том, как компилятор знает лучше или микро оптимизаций, поэтому я, вероятно, не должен даже допускать, чтобы это предложение оставалось в вопросе. О, подожди ...

+6

Даже если готовая спецификация стоит денег, [черновики доступны] (https://isocpp.org/std/the-standard), чтобы вы могли проверить себя. Последний проект до ратификации обычно совпадает с текстом готовых стандартов (единственное различие заключается в том, что некоторые рекламные ролики не важны). –

+6

'inline' о ODR, а не о входящих вызовах. И нет, нет; это зависит от реализации. –

+0

'' является частью реализации, и в любом случае необязательно следует строгим правилам C++. Наиболее важным правилом, которое почти всегда нарушается, является использование префиксов '_ [A-Z]' - вы не можете, реализация должна. – MSalters

ответ

9

№ Реализация автора выбирает.

[C++14: 17.6.5.4/1]: Не определено ли какие-либо глобальные или не являющихся членами функции в стандартной библиотеке C++ определены как inline (7.1.2).

[C++14: 17.6.5.5/1]: Не определено, определены ли какие-либо функции-члены в стандартной библиотеке C++ как inline (7.1.2).

И помните, что это не имеет никакого отношения к фактической inlining в настоящее время; это действительно влияет только на ODR.

+0

Можете ли вы рассказать о том, как это влияет на ODR и еще много чего? Небольшой пример был бы весьма полезен. – DeiDei

+3

@DeiDei http://stackoverflow.com/q/4192170/212870. Или вы всегда можете найти это сами. –

Смежные вопросы