我無法通過搜索找到答案,因此下一步是詢問。說我有一些像這樣的代碼: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可以使用常量參數,但是如果部分參數是常量而且部分是可變的,它會部分優化嗎?
摘要:函數(它必須是行內正確的嗎?)可以通過不斷的傳播進行部分優化,如果有的話,它有什麼要求?
即使我寫這,我想,內聯函數調用將會傳播常數...
您是否嘗試查看編譯器生成的代碼? –
常量摺疊在現代編譯器中非常普遍。無論你是否製作模板參數,我都懷疑這個問題很重要。 –