【发布时间】:2015-10-16 07:34:10
【问题描述】:
我认为我对编译器有严重的不信任。如果内联函数内部的分支具有恒定的结果,它们会被优化掉吗?
对于示例函数:
#define MODE_FROM_X_TO_Y 0
#define MODE_FROM_Y_TO_X 1
inline void swapValues(int & x, int & y, int mode) {
switch(mode) {
case MODE_FROM_X_TO_Y:
y = x;
break;
case MODE_FROM_Y_TO_X:
x = y;
break;
}
}
会:
swapValues(n,m,MODE_FROM_X_TO_Y);
优化为:
n = m;
【问题讨论】:
-
这将取决于您使用的实际编译器,但通常答案是“是”和“否”。
-
您可以做的一个简单测试是在发布版本中编译您的代码,并尝试在您认为编译器正在优化的代码行中放置一个断点,如果您不能在那里放置一个断点您可以查看错误,有时(并非总是)编译器会说它无法达到该断点,因为正在优化代码。但这并不总是有效,唯一知道的方法是去大会
-
刚刚用 clang 和
-O3测试过这个:是的,它已经完全优化了。
标签: c++ visual-c++ inline compiler-optimization