【发布时间】:2014-03-27 10:00:05
【问题描述】:
我正在编写一个模板化函数*,类似于以下内容:
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。 -
@pmr 这是真的,但我经常在 CUDA 代码中看到这样的代码。这样,与使用函数参数相比,可以更好地优化设备代码,从而减少代码和通常更小的寄存器使用量,同时仍然避免重复代码。
-
@pmr:编辑了我的示例,以使您的评论不再是问题,即降低专业化的相关性。另外,我认为 nvcc 只会阻止对
v的部分专业化。
标签: c++ templates instantiation compiler-warnings