inline函数的目的是为了提高程序的运行效率, 对规模很小且无复杂控制过程的函数,可以使用关键字inline将其标识为inline函数,其原理是,在调用处直接使用函数源码替换调用点,从而避免了函数调用过程中的上下文切换等过程,以提高执行效率。
只是不太理解的是:某书中原语:“如果在类体外定义inline函数,则必须将类定义和该成员函数的定义都放在同一头文件中或者写在同一源文件中,否则编译时无法进行置换,编译不通过”。
而把inline去掉就OK了, 看来书上说的是没错的。
只是不太理解的是:某书中原语:“如果在类体外定义inline函数,则必须将类定义和该成员函数的定义都放在同一头文件中或者写在同一源文件中,否则编译时无法进行置换,编译不通过”。
计算机的真假问题,如果你不信邪,都可以试一下。
那就果断试一把:
//student.h
class CStudent
{
public:
CStudent(int number, string name, int score):m_number(number), m_name(name),
m_score(score) {}
~CStudent(void)
{}
void get_student_info(void);
private:
int m_number;
string m_name;
int m_score;
};
//student.cpp
//void CStudent::get_student_info(void)
inline void CStudent::get_student_info(void)
{
cout << "m_number: " << m_number << endl;
cout << "m_name: " << m_name << endl;
cout << "m_score: " << m_score << endl;
return;
}
//test_inline_func.cpp
int main(void)
{
CStudent stud1(101010101, "xtank.nie", 99);
stud1.get_student_info();
return 0;
}
//编译结果
g++ -c student.cpp
g++ -o test_inline_main test_inline_main.o student.o
test_inline_main.o: In function `main':
test_inline_main.cpp:(.text+0x8f): undefined reference to `CStudent::get_student_info()'
collect2: ld returned 1 exit status
make: *** [test_inline_main] Error 1
而把inline去掉就OK了, 看来书上说的是没错的。
个人的目前的理解:编译过程中,每个文件是一个独立的单元,在编译test_inline_main.cpp---->test_inline_main.o的过程中,编译器确实找不到get_student_info函数的源码来替换调用处,仔细想想,要是我,我也找不到。