c++ - 内联函数中的分支

标签 c++ visual-c++ inline compiler-optimization

我想我对编译器有严重的不信任。如果内联函数内的分支具有恒定结果,它们是否会被优化掉?

对于示例函数:

#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;

最佳答案

首先,它甚至不会编译(直到您添加返回类型)。

其次,swap 是一个非常糟糕的选择名称(因为它不执行 swap,并且与 std::swap 冲突> 姓名)。

第三,前往 http://gcc.godbolt.org/ :

Live On Godbolt

enter image description here

关于c++ - 内联函数中的分支,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/31630675/

相关文章:

c++ - 递减原子计数器 - 但 <only> 在一个条件下

c++ - 将 double 舍入到最接近的非次正规表示

windows - GetWindowLong() - Creators Update 引入的行为变化破坏了我的 win32 应用程序

c++ - 无锁有界堆栈 C++11 原子

c++ - 使用 QT 绘制、填充表格并将其打印为 PDF 文件

c++ - 将结构类型转换为整数 C++

c++ - 如何输出增量值?

jQuery 按钮处理程序与内联 onClick

c++ - 编译器内联函数有多深?

c++ - Visual C++ __forceinline 奇怪的行为