在《深度探索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
本人貌似也有这本书,应该在压箱底
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处理。
应该是和mangling有关。
假如是C程序调用C程序,或C++程序调用C++程序,那么
加一个括号好逗号运算符就没有起什么作用。
假如C程序调用C++程序,或是C++程序调用C程序,就要考虑到
编译器的name mangling处理。