这是我的情况:
我创建了一个名为 MyFunction
的函数
MyFunction
使用参数定义接受两个数组 template<std::size_t N1, std::size_t M1, std::size_t N2, std::size_t M2>
.
然后我做了MyFunction
如下:
void MyFunction(double (&W)[N1][M1],double (&TD)[N2][M2]){
并且在 MyFunction
我有一个 for
像这样循环 for(int i; i<N1; i++){...}
.
它不会编译并且还有一个警告说:
warning: comparison between signed and unsigned integer expressions.
我不知道这个警告是什么意思。如果有人知道为什么会这样,请帮忙。 :)
最佳答案
std::size_t
是无符号类型并且 int
是有符号类型。警告非常明确:您正在尝试比较 i
, 是有符号类型, N1
, 是无符号类型。你大概有 -Werror
打开或类似的东西。
存在此警告的原因是您可能会得到违反直觉的结果。例如,-1 < (std::size_t)(0)
很可能是假,因为-1
很可能会转换为 std::size_t
并最终成为一个大的正值。 (从技术上讲,发生这种情况是因为关系运算符执行通常的算术转换,这种转换有利于无符号类型而不是宽度相等或更小的有符号类型。)
但是,许多人也禁用此警告,因为使用了 int
循环控制变量非常常见并且通常是良性的。只要确保你不能得到任何负数。
关于c++ - 使用模板变量循环不起作用?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/33446555/