我正在寫一個模板函數*類似以下內容:如何避免「無法訪問的代碼中的動態初始化」警告?
template <typename T, bool v>
void foo(T t1) {
/* common code */
if (v) {
int i = bar();
/* ... */
return;
}
else {
/* ... */
}
/* more common code */
}
當我編譯這個和foo
進行實例化v
設置爲false,編譯器說:
warning: dynamic initialization in unreachable code
現在,由於模板參數,代碼無法訪問;這應該是完全可以接受的。我怎樣才能避免或抑制這個警告?我寧願不完全壓制這種警告。
注:
- 我寧願不擅長不同的真假,因爲有一些共同的代碼,我不想重複,也不是人爲地創造另一個功能。
- 實際上它是由NVCC編譯的CUDA內核。如果你能更普遍地回答這個問題,請做,否則專門回答這個案件。
你可以專門爲'v'。 – RedX
我擔心,你的測試用例不能反映實際問題 –
@pmr這是真的,但我經常在CUDA代碼中看到類似這樣的代碼。這樣,與使用函數參數相比,器件代碼可以更好地優化,從而導致更少的代碼和更少的寄存器使用,同時仍避免重複的代碼。 – anderas