c++ - 如果在头文件中定义函数,inline 关键字是否有意义?

标签 c++ templates inline

所有代码从我读过的内容来看,A1 和 A2 是相同的,但如果 A3 与 A2 相同,我就不知道了。我知道代码会编译,因为所有的 A 类都被模板化了。

注意:所有类和方法声明都在 .h 文件中。

template <typename _Ty>
class A1 {
public:
    A1();
    void foo() { ... }
};


template <typename _Ty>
class A2 {
public:
    A2();
    void foo();
};

template <typename _Ty>
inline void A2<_Ty>::foo() { ... }


template <typename _Ty>
class A3 {
public:
    A3();
    void foo();
};

template <typename _Ty>
void A3<_Ty>::foo() { ... } // note: No inline keyword here.

附言我在 stackoverflow 上看到过这个问题的变体,但不是这个确切的问题。

最佳答案

是的,它是有意义的,但与模板结合时效果不大。

inline关键字的主要作用是告诉编译器,这个函数可能在多个编译单元中以相同的定义出现,所以需要标记为“select-one”链接器(这样你就不会得到多个定义错误)。模板已经具有此功能。

inline 也向编译器提示您认为函数应该内联,但编译器通常会自行做出内联优化的最终决定。

关于c++ - 如果在头文件中定义函数,inline 关键字是否有意义?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/10282108/

相关文章:

C++:为什么 VS2005 中的(模板)类中的运算符放置 new 不被识别为内联友元函数?

f# - 为什么不能使用不同类型的参数两次使用相同的函数?

C++:对函数的 undefined reference ,参数似乎已更改

c++ - 使用模板化方法将类作为 GCC 的模板参数传递

generics - 具体化的类型参数和内部结构

c++ - 如何在 C++ 中调用外部模板函数

.net - 在MVC3中如何将所有脚本移动到页面底部的</body>之前?

c++ - 用 C++ 实现引用计数

c++ - 为什么 mt19937 的 STD 实现有双倍的 sizeof 作为 boost 版本?

c++ - 如果右值引用确实需要 std::move,我们应该什么时候声明它们?