inline 関数¶
関数に inline
をつけると
コンパイラに インライン展開 するように指示することができます。
この指示をした関数のことを inline 関数といいます。
実際にインライン展開をするかどうかはコンパイラの判断次第です。
inline
をつけてもインライン展開されないことや、
inline
をつけなくてもインライン展開されることがあります。
inline 関数は定義が同一である場合に限って、 異なるソースファイルで同一の定義をしてもいいと決められています。
#include <iostream> #include "something.h" inline void HelloWorld() { std::cout << "Hello World!" << std::endl; } int main() { HelloWorld(); Something(); return 0; }
#ifndef SOMETHING_H_ #define SOMETHING_H_ void Something(); #endif // SOMETHING_H_
#include "something.h" #include <iostream> inline void HelloWorld() { std::cout << "Hello World!" << std::endl; } void Something() { HelloWorld(); }
この例では main.cc
と something.cc
で
定義が同一である inline 関数 HelloWorld()
がそれぞれ存在します。
これによって inline 関数であればヘッダファイルで関数定義をしてもリンク時にエラーにはなりません。
#ifndef HELLO_WORLD_H_ #define HELLO_WORLD_H_ #include <iostream> inline void HelloWorld() { std::cout << "Hello World!" << std::endl; } #endif // HELLO_WORLD_H_
#include "hello_world.h" #include "something.h" int main() { HelloWorld(); Something(); return 0; }
#ifndef SOMETHING_H_ #define SOMETHING_H_ void Something(); #endif // SOMETHING_H_
#include "something.h" #include "hello_world.h" void Something() { HelloWorld(); }