2

我的程序有一个迭代算法和一个我写的for循环

for ( auto i: std::views::iota( 0u, max_iter ) ) { ... }

我真的很喜欢它可以这样写,即使必要的头文件很大。i当我编译它时,虽然我收到一个未使用变量的警告。

当我以老式方式编写 for 循环时

for ( unsigned i=0; i < max_iter; i++ ) { ... }

那么就没有警告了。

我用一个最小的程序测试了这个for-loop.cpp

#include<ranges>
#include<numeric>
#include<iostream>

int main() {

    char str[13] = "this is good";

    for (auto i : std::views::iota(0u, 2u)) {
        std::cout << str << "\n";
    }
  
    for (unsigned it=0; it<2; it++ ) {
        std::cout << str << "\n";
    }

    return 0; 
} 

果然,编译它g++ -Wall --std=c++20 -o for-loop for-loop.cpp会为第一个循环而不是第二个循环发出警告。

我在这里错过了什么吗?我更喜欢第一种表示法——而且我知道我可以停止警告-Wno-unused-variables;我想要那些警告,只是我真的在使用 for-loop 计数器。

4

2 回答 2

4

i确实从未使用过。

您可以添加属性[[maybe_unused]]以忽略该警告:

for ([[maybe_unused]]auto i : std::views::iota(0u, 2u)) {
    std::cout << str << "\n";
}
于 2022-01-07T14:27:58.183 回答
2

随着auto i你永远不会在任何地方使用变量。

随着for ( unsigned i=0; i < max_iter; i++ )您使用i两次,一次i < max_iter又一次,i++因此使用了变量

于 2022-01-07T14:25:22.337 回答