Рассматривая следующий простой пример:
Заголовок:
// 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, если это имеет значение).
EDIT
Полагаю, я не очень хорошо объяснил.Что я имел в виду именно это.Если я использую максимальный уровень оптимизации, будет ли // do something and return the result
помещаться в A::foo()
или A::Imp::foo()
?
Без оптимизации я вижу, что это не сделано (по-прежнему вызывается the pimpl->foo()
).
Я понимаю, что A :: foo () никогда не будет встроен в main (), но я не об этом спрашиваю.