C++ 函数内联的可能性取决于它在C+中的定义位置+;

C++ 函数内联的可能性取决于它在C+中的定义位置+;,c++,inline,C++,Inline,我正在写一个向量类(在数学意义上,而不是在std::Vector意义上),当时我开始考虑类的方法被内联的可能性,这取决于函数是如何定义的 我对以下情况感兴趣: 案例1,函数体在头文件中的声明位置定义。e、 g // Vector.h class Vector { public: // Other stuff up here float Magnitude(void) const { return sqrt(X*X + Y*Y); } /

我正在写一个向量类(在数学意义上,而不是在
std::Vector
意义上),当时我开始考虑类的方法被内联的可能性,这取决于函数是如何定义的

我对以下情况感兴趣:

案例1,函数体在头文件中的声明位置定义。e、 g

// Vector.h
class Vector
{
public:
    // Other stuff up here

    float Magnitude(void) const
    {
        return sqrt(X*X + Y*Y);
    }

    // Other stuff down here
}
案例2,函数体在初始类定义之后的头文件中定义。e、 g

// Vector.h
class Vector
{
public:
    // Other stuff up here

    float Magnitude(void) const;

    // Other stuff down here
}

// Other stuff up here

float Vector::Magnitude(void) const
{
    return sqrt(X*X + Y*Y);
}

// Other stuff down here
案例3,函数体在相应的
.cpp
文件中提供,声明和定义分开。e、 g

// Vector.h
class Vector
{
public:
    // Other stuff up here

    float Magnitude(void) const;

    // Other stuff down here
}

//Vector.cpp
#include "Vector.h"

// Other stuff up here

float Vector::Magnitude(void) const
{
    return sqrt(X*X + Y*Y);
}

// Other stuff down here
案例4,函数定义在作为编译器输入提供的相应
.lib
文件中提供

案例5,函数定义在相应的
.dll
链接文件中提供

在这5种情况中,函数内联的概率是多少?我不是说确切的概率,我是说相互比较,哪些更可能是内联的,哪些不太可能

其他资料:


我故意忽略
inline
关键字,以简化问题,使其不太宽泛。我知道还有很多其他问题需要解决内联问题,但我无法找到关于每个案例的足够信息来解决这个问题。另外,我知道库已经存在,并且预先制作了向量类,这不是练习的重点。

这主要取决于编译器,因为它们可以自由地内联任何函数

1) 仅在第一种情况下,它将尝试自动内联函数,因此添加
inline
关键字是多余的

2) 在案例2-3中,您必须添加
inline
关键字,然后它可能会被内联。(仍取决于编译器)

3) 在案例4和案例5中,函数无法内联,因为
.lib
.dll
的代码已经编译。(和
.dll
甚至只在运行时加载!)

许多编译器还支持一个选项,允许它们自动内联任何合适的函数(
-O3
gcc
中)