【发布时间】:2011-04-11 07:53:13
【问题描述】:
当我编写一个简单的(非模板)类时,如果“就地”提供了函数实现,它会自动被视为inline。
class A {
void InlinedFunction() { int a = 0; }
// ^^^^ the same as 'inline void InlinedFunction'
}
在谈论基于模板的类时,这条规则怎么样?
template <typename T> class B {
void DontKnowFunction() { T a = 0; }
// Will this function be treated as inline when the compiler
// instantiates the template?
};
另外,inline 规则如何应用于非嵌套模板函数,如
template <typename T> void B::DontKnowFunction() { T a = 0; }
template <typename T> inline void B::DontKnowFunction() { T a = 0; }
第一种情况和第二种情况会发生什么?
谢谢。
【问题讨论】:
-
请问您为什么想知道这个问题的答案?我已经完成了很多 c++ 编码,而且我还没有遇到过重要的情况。
-
@Benoît 这里也一样,但是最近在编写一些基于模板的代码块时,我了解到我实际上不知道在我所描述的情况下会发生什么。那么为什么不问一个问题呢? :)
-
不确定您在寻找什么课程问题,但我对答案很感兴趣 :o) 我不相信 DontKnowFunction() 和内联有什么特别之处。如果主体是类声明的一部分,那么它被认为是隐式的,否则使用内联,并且主体在声明之外。
-
@Benoît,知道这会很有趣,特别是如果您害怕对象代码膨胀。
标签: c++ templates inline-method