首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >C++ -避免了类定义中定义的函数的隐式内联。

C++ -避免了类定义中定义的函数的隐式内联。
EN

Stack Overflow用户
提问于 2012-06-01 23:15:22
回答 3查看 1.2K关注 0票数 2

在我的实现文件(.cc文件)中,我经常发现在类定义中定义成员函数(例如Pimpl类的函数)是很方便的。例如:

代码语言:javascript
复制
struct X::Impl {
    void DoSomething() {
        ...
    }
};

而不是

代码语言:javascript
复制
struct X::Impl {
    void DoSomething();
};

void X::Impl::DoSomething() {
    ...
}

我认为这比实现类定义之外的函数更可取,原因有几点。它增强了可读性,并便利了将方法保持较小的实践(通过使添加它们变得容易)。代码也更易于维护,因为您从来不需要更新方法声明。

我看到的唯一缺点是类声明中定义的方法是隐式内联的,这通常不可取,因为对象代码的大小增加了。

我的问题是:

  1. 我有这个权利吗?这种做法还有什么不好的地方吗?
  2. 是要担心的隐式内衬吗?编译器是否聪明到拒绝我对不应该内联的内联方法的隐式请求?
  3. 是否可以(通过编译器扩展或其他方式)声明类定义中定义的方法没有内联?
EN

Stack Overflow用户

发布于 2012-06-01 23:23:31

我不知道如何防止内衬,但GCC可以使用属性。例如:

代码语言:javascript
复制
struct X::Impl {
    void DoSomething() __attribute__((noinline)) {
        ...
    }
};
票数 2
EN
查看全部 3 条回答
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/10858458

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档