### 内联成员函数

在定义函数时，可以使用 inline 关键字将函数定义为内联函数。在定义类的成员函数时，也可以使用 inline 关键字将成员函数定义为内联成员函数。其实，对于成员函数来说，如果其定义是在类体中，即使没有使用 inline 关键字，该成员函数被认为是内联成员函数。

例如，定义内联成员函数。

class CUser //定义一个 CUser 类

{

private:

char m_Username[128]; //定义数据成员

char m_Password[128];

public:

char* GetUsername()const //内联成员函数

{

return (char*)m_Username; //返回结果

}

};

上述代码中的 GetUsername 函数即为内联成员函数，因为函数的定义处于类体中。此外，还可以使用 inline 关键字表示函数为内联成员函数。

例如，使用 inline 关键字定义内联成员函数。

class CUser //定义一个 CUser 类

{

private:

char m_Username[128]; //定义数据成员

char m_Password[128];

public:

inline char* GetUsername()const; //定义一个内联成员函数

};

char* CUser::GetUsername()const //实现内联成员函数

{

return (char*)m_Username;

}

另外，也可以在类成员函数的实现部分使用 inline 关键字标识函数为内联成员函数。例如：

class CUser //定义一个 CUser 类

{

private:

char m_Username[128]; //定义数据成员

char m_Password[128];

public:

~CUser()

{

printf("Destructor is Invoked! \n");

}

char* GetUsername()const; //定义成员函数

};

inline char* CUser::GetUsername()const //函数为内联成员函数

{

return (char*)m_Username; //设置返回值

}

对于内联成员函数来说，程序会在函数调用的地方直接插入函数代码，如果函数体语句较多，因此会导致程序代码膨胀。如果将类的析构函数定义为内联成员函数，可能会导致潜在地代码膨胀。分析下面的代码（假设 CUser 类的析构函数为内联函数）。

示例，将类的析构函数定义为内联函数，可能会导致潜在地代码膨胀。

int main(int argc, char* argv[])

{

CUser User; //定义一个 CUser 类对象 User

int state = 0; //定义一个整型变量

switch(state) //switch 语句

{

case 0: //分支判断

{

printf("%s\n",User.GetUsername()); //输出信息

return 0; //终止 switch 语句

}

case 1: //分支判断

{

printf("%d\n", 100); //输出信息

return 0; //终止 switch 语句

}

default: //默认处理

return 0;

}

return 0;

}

由于 CUser 类的析构函数是内联成员函数，因此上述代码在每一个 return 语句之前，析构函数均会被展开。因为 return 语句表示当前函数调用结束，user 对象的生命期也就结束了，自然调用其析构函数。

根据上述分析，main 函数中 switch 语句的编写是非常不明智的，下面对其进行修改，将 return 语句替换为 break 语句。

例如，switch 语句的注意事项。

int main(int argc, char* argv[])

{

CUser User; //定义一个 CUser 类对象 User

int state = 0; //定义一个整型变量

switch(state) //switch 语句

{

case 0: //分支判断

{

printf("%s\n",User.GetUsername()); //输出信息

break; //终止 switch 语句

}

case 1: //分支判断

{

printf("%d\n", 100); //输出信息

break; //终止 switch 语句

}

default: //默认处理

break;

}

return 0;

}

通过修改 switch 语句，避免了可能产生的代码膨胀，这也是使用 switch 语句应该注意的事项。