次の簡単な例を考えてみましょう:
ヘッダー:
// a.hpp
#ifndef A_HPP
#define A_HPP
#include <memory>
class A
{
public:
A();
int foo();
private:
struct Imp;
std::auto_ptr< Imp > pimpl;
};
#endif // A_HPP
実装:
// a.cpp
#include "a.hpp"
struct A::Imp
{
int foo()
{
// do something and return the result
}
};
A::A() : pimpl( new Imp )
{}
int A::foo()
{
return pimpl->foo();
}
メイン:
// main.cpp
#include "header.hpp"
int main()
{
A a;
return a.foo();
}
質問は次
のとおりです。メソッドはA::Imp::foo
にインライン化されA::foo
ますか?
そのメソッドの内容は実装に依存しますか?
PS私はgccを使用しています(問題がある場合は4.3.0)。
編集
うまく説明できていなかったと思います。私が正確に意味したのはこれです。最適化レベルを最大にした場合、 は または// do something and return the result
に配置されますA::foo()
かA::Imp::foo()
?
最適化がなければ、これは行われていないことがわかります (the pimpl->foo()
はまだ呼び出されています)。
A::foo() が main() でインライン化されることはないことは理解していますが、それは私が求めていることではありません。