使用模板保证 'if' 语句消除

Guaranteed 'if' statement elimination by using templates

我想知道是否可以(通过编译器的实现)保证某些 'if' 语句永远不会以二进制代码实现,即某些给定的 'if' 语句不会跳转将永远用在二进制代码中。

这可以通过示例来激发,但让我简短一点。假设你有这样一个 class:

template<bool N = true>
class A {
    public:
        // ...

        void f() {
            // do some work
            if (N) {
                // do some optional work
            }
            // do more work
        }

        // ...
};

当 class A 被实例化为 A<false> 时,函数 f 中的 'if' 语句是否会被现代编译器实现? “实施”是指是否要生成分支(或跳转)指令。

在我看来,答案是否定的,即编译器将删除它(可能是因为实现 if (false) { .. } 没有多大意义)。但这是否保证会在 all 编译器中发生?我怎么知道 a 编译器是否进行了这种优化? 'if' 语句是否仅在优化标志(例如 g++ 中的 -O1 或更高)传递给编译器时才会被删除?也就是说,完全没有优化的时候是不是也去掉了?

可能

if constexpr (condition)

语法将是一个有趣的解决方案,没有模板