Funkcja inline
Ostatnio zmodyfikowano 2015-07-31 13:25
carlosmay Temat założony przez niniejszego użytkownika |
Funkcja inline » 2015-07-30 22:07:32 inline void show( chaff & st, int n ) { std::cout << st.st_ddd << ",\t" << st.st_sss << std::endl; }
Czy taką funkcję kompilator potraktuje jako inline czy jak zwykłą? Wiem, że inline używa się raczej do takich konstrukcji inline int fun( int a, int b ) { return a * b; }
Ciekawość. Sorki jak przynudzam. |
|
pekfos |
» 2015-07-31 13:19:28 Bardziej niż długość, przeszkadza rekurencja, a inline to tylko wskazówka. Funkcje nie-inline mogą być rozwijane w miejscu wywołania, a inline mogą nie być. Istotniejsze jest to, że słowo inline łagodzi regułę jednej definicji i możesz takie funkcje wstawić do nagłówków, więc kompilatorowi łatwiej taką funkcję rozwinąć.
|
|
czosnek17 |
» 2015-07-31 13:25:59 Compiler settings -> compiler flags Warn if a function can not be inlined and it was declared as inline -Winline Jak pisał pekfos dopiero rekurencją się udało zmusić kompilator do wypisania ostrzeżenia, ale jak zmieniam bool na void to kompiluje bez ostrzeżeń; #include <iostream> using namespace std;
inline bool f( long l[] ) { static int s; s++; for( int i = 0; i < 99; i++ ) { cout << l[ i ] * l[ i ] << endl; } if( s < 10 ) f( l ); return false; } int main() { long l[ 99 ]; f( l ); return 0; }
warning: inlining failed in call to 'bool f(long int*)': call is unlikely and code size would grow [-Winline] |
|
« 1 » |