c++ - 使用模板变量循环不起作用?

标签 c++ for-loop compiler-errors

这是我的情况:

我创建了一个名为 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/

相关文章:

c++ - C/C++ 静态库当前目录

c++ - 我们如何在销毁时捕获标准类?

c++ - LoadLibrary() dll 的相对地址

javascript - 基于For循环迭代的数组拼接

android - Android : How to tell where an error is located

c++ - 3个错误: error: 'Entry' was not declared in this scope. error: template argument 1 is invalid. error: invalid type in declaration before '(' token

c++ - 使用 OpenAL 录制音频

java - 如何编写程序根据数学运算顺序进行计算? ( java )

java - 在for循环Java中更改变量名称

java - 泛型的JSP编译错误