在我的实现文件(.cc 文件)中,我经常发现在类定义中定义成员函数(例如 Pimpl 类的函数)很方便。例如:
struct X::Impl {
void DoSomething() {
...
}
};
代替
struct X::Impl {
void DoSomething();
};
void X::Impl::DoSomething() {
...
}
我认为这比在类定义之外实现函数更可取,原因有几个。它增强了可读性并促进了保持方法小(通过使其易于添加)的实践。代码也更容易维护,因为您不必更新方法声明。
我看到的唯一缺点是类声明中定义的方法是隐式内联的,由于目标代码大小的增加,这通常是不可取的。
我的问题是:
我有这个权利吗?我缺少这种做法的其他缺点吗?
隐式内联是否值得担心?编译器是否足够聪明,可以拒绝我对不应内联的内联方法的隐式请求?
是否可以(通过编译器扩展或其他方式)声明类定义中定义的方法不被内联?