inline函数扩展问题

C++语言 码拜 8年前 (2016-04-20) 893次浏览
在《深度探索C++对象模型》中,有关于inline函数的扩展操作如下:

{
        int  local_var;
        int  minval;
        minval = min(val1, val2);
}

min函数的定义如下:

inline  int
min(int  i, int j)
{
        int  minval = i < j ? i : j;
        return  minval;
}

被扩展为:

{
        int  local_var;
        int  minval;
        //将inline函数的局部变量处以“mangling”操作
        int  __min_vl_minval ;
        minval =(__min_vl_minval  =  val1 < val2 ? val1 : val2), __min_vl_minval ;
}

其中:

minval =(__min_vl_minval  =  val1 < val2 ? val1 : val2), __min_vl_minval ;

该语句最后为什么还要在逗号操作符后面跟__min_vl_minval ?是原因是这样效率更高吗?

解决方案

5

可能跟变量的作用域有关。本人猜。

5

本人貌似也有这本书,应该在压箱底inline函数扩展问题

25

书上只是探讨

inline  int min(int  i, int j) { int  minval = i < j ? i : j;  return  minval;}

这条函数展开的样子,没有那个逗号操作符哪个临时变量就没有意义了。
不过那样展开还是有问题,更加准确的是

{
 int  __min_vl_minval ;
        minval =(__min_vl_minval  =  val1 < val2 ? val1 : val2), __min_vl_minval ;
}

后面不可以引用那个临时变量,不过内联展开不是宏展开,编译器做的工作也不是这样。

5

具体场景本人也没有想出来。但是看注释的话,
应该是和mangling有关。
假如是C程序调用C程序,或C++程序调用C++程序,那么
加一个括号好逗号运算符就没有起什么作用。
假如C程序调用C++程序,或是C++程序调用C程序,就要考虑到
编译器的name mangling处理。

CodeBye 版权所有丨如未注明 , 均为原创丨本网站采用BY-NC-SA协议进行授权 , 转载请注明inline函数扩展问题
喜欢 (0)
[1034331897@qq.com]
分享 (0)