C++ 模板和内联

标签 c++ templates inline-method

当我编写一个简单的(非模板)类时,如果函数实现是“就地”提供的,它会自动被视为 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++ 模板和内联,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/3694899/

相关文章:

c++ - 成员函数 C++ 的无效使用

c++ - 具有模板参数的模板特化

c++ - 一个类可以有将当前类作为参数的成员吗

c++ - C++ 中的内联成员函数

c++ - 调用内联函数 C++

c++ - 运行时错误 C++ 程序 : glibc detected, munmap_chunk(),无效指针

c++ - 遍历类模板的显式特化

c++ - Doxygen 如何记录 SC_MODULE 中定义的类?

c++ - VS2012 中的 ADL 错误?

c# - 如果启用优化,JIT 是否会始终内联此方法?