【发布时间】:2008-11-06 00:15:14
【问题描述】:
我有一些看起来像这样的代码:
template<unsigned int A, unsigned int B>
int foo() {
int v = 1;
const int x = A - B;
if (x > 0) {
v = v << x;
}
bar(v);
}
gcc 会抱怨 x 对于 A、B 的某些实例是负数;但是,我确实进行了检查以确保它是非负数。解决这个问题的最佳方法是什么?我知道我可以将x 转换为unsigned int,但这会导致警告x 大于v 的宽度(因为它会将负数转换为正数)。我知道有一种解决方法涉及创建一个新的模板化 shift 函数,但如果可能的话,我想避免这种情况。
【问题讨论】: