gpt4 book ai didi

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

转载 作者:行者123 更新时间:2023-11-30 05:36:49 24 4
gpt4 key购买 nike

这是我的情况:

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

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com