inline函数的疑惑

inline函数的目的是为了提高程序的运行效率, 对规模很小且无复杂控制过程的函数,可以使用关键字inline将其标识为inline函数,其原理是,在调用处直接使用函数源码替换调用点,从而避免了函数调用过程中的上下文切换等过程,以提高执行效率。
只是不太理解的是:某书中原语:“如果在类体外定义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函数的源码来替换调用处,仔细想想,要是我,我也找不到。



评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值