Fefer_Ivan's blog

By Fefer_Ivan, 12 years ago, In Russian

Доброе утро/день/вечер, Codeforces.

Сегодня я, сдавая задачу 89D - Космические мины на С++, задумался о том, что у в моем коде много коротких функций, которые вызываются по много раз, и о том, что это может повлиять на производительность. Я всегда пишу относительно короткие функции с inline. inline-функция (или встроенная функция) на этапе компиляции заменяется в коде не на вызов функции, а прямо на тело, т.е. как макрос, только на уровень ниже. 
Но если написать inline int f(){ //some code}, это не гарантирует, что компилятор сделает функцию f() встроенной, это только как бы намекает компилятору, что стоило бы сделать эту функцию таковой, а он уже сам решает стоит это делать или нет. 
Поэтому я решил проконтролировать компилятор и посмотреть, действительно ли все функции типа inline double dist(const point& a, const point& b) { return sqrtl(sqr(a.X - b.X) + sqr(a.Y - b.Y)); } стали встроенными. В результате небольшого гугления я получил следующие решения:
  • На g++ есть опция -Winline, которая генерирует warning, если функция, перед которой написано ключевое слово inline, не была сделана встроенной
  • На Visual C++ есть аналогичный warning 4-го уровня. Также можно писать перед функциями __forceinline. Если компилятор не сделает встроенной функцию с __forceinline, то он сгенерирует warning 1-го уровня.
  • Vote: I like it
  • +34
  • Vote: I do not like it