读书人

关于内联函数的一些基本有关问题

发布时间: 2012-02-21 16:26:23 作者: rapoo

关于内联函数的一些基本问题?
1.内联函数的工作原理是当调用该函数时 就将这个函数的整个定义添加到调用它的地方吗?
2.把成员函数的定义和类的声明放在同一个头文件中时 那么这个成员函数被隐式的声明为内联函数吗? 在这种情况下编译器是否还考虑能否把这个函数做为内联函数呢?
3.在一个程序中声明内联函数 编译器会自动判断是否把这个函数声明为内联函数是吗?
4.如果把成员函数放在一个单独的文件中定义 ,那么即使把他声明为内联函数,编译器也要考虑它能否真的成为内联函数是吗?


[解决办法]
内联函数里面不能有递归,循环,break,不能带异常接口声明.
定义内联类似于c的宏,编译时直接在调用内联函数的地方用函数代码替换
所以内联函数适合于代码较短的成员函数.
[解决办法]
内联函数就是编译器直接将这个函数复制到要用的地方,而不再是函数调用。

内联函数的标识inline只是给系统的建议,不是强制性的。

现在的系统已经有足够的智能,基本上能自动判断哪些函数适合作为内联函数,有些函数即使你不声明为内联函数,系统也可能会自动作为内联函数处理。

循环语句与递归调用是不允许作为内联函数的,不管你是否有inline声明,甚至哪怕它只循环一次。

总之,是否作为内联函数可以基本不用人工干预,系统会自动判断。
[解决办法]

loongee(♂の翼♀) ( ) 信誉:100 Blog 加为好友

是这样的,内联是在编译时就完成的,
" " " "2.把成员函数的定义和类的声明放在同一个头文件中时 那么这个成员函数被隐式的声明为内联函数吗? " " " " " " "//不是这样,是若一个类成员函数定义被包含在类声明之内.才会被认为是隐式内联,另外应该是被声明为内联的类成员函数若在类声明外定义,要和声明类的头文件放在一起

//aaa.h
class aaa
{
public:
...........
int fun1() {......}; //这被认为是隐式内联
int fun2();
............
};

inline int aaa::fun2() //这一个要和aaa.h头文件放在一起
{.......}

[解决办法]
1.内联函数的工作原理是当调用该函数时 就将这个函数的整个定义添加到调用它的地方吗?
- 是的

2.把成员函数的定义和类的声明放在同一个头文件中时 那么这个成员函数被隐式的声明为内联函数吗? 在这种情况下编译器是否还考虑能否把这个函数做为内联函数呢?
-成员函数的定义必须在类声明内部才会自动成为内联.

3.在一个程序中声明内联函数 编译器会自动判断是否把这个函数声明为内联函数是吗?
-最终是否内联完全由编译器决定.当编译器认为函数足够小的时候才会内联

4.如果把成员函数放在一个单独的文件中定义 ,那么即使把他声明为内联函数,编译器也要考虑它能否真的成为内联函数是吗?
-放在单独cpp文件中是不可能被内联的,因为内联是一个编译期行为.

读书人网 >C++

热点推荐