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
中)