我无法通过搜索找到答案,因此下一步是询问。说我有一些像这样的代码:C++中的函数调用常量传播
template<class Int>
inline Int onbit(Int value, int n) {
return value | (static_cast<Int>(1) << n);
}
如果我调用的代码,这样onbit(A, 4)
,将不断4
通过传播和优化,或者我应该使它成为一个模板(template<int n, class Int>
),因此,这将是不变。这里是否需要C++ 0x constexpr,如果是这样,我该如何使用它(应该是int n
是const还是constexpr?)。
我知道constexpr可以使用常量参数,但是如果部分参数是常量而且部分是可变的,它会部分优化吗?
摘要:函数(它必须是行内正确的吗?)可以通过不断的传播进行部分优化,如果有的话,它有什么要求?
即使我写这,我想,内联函数调用将会传播常数...
您是否尝试查看编译器生成的代码? –
常量折叠在现代编译器中非常普遍。无论你是否制作模板参数,我都怀疑这个问题很重要。 –