我的程式有一個帶有 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 計數器。
uj5u.com熱心網友回復:
i 確實從未使用過。
您可以添加屬性[[maybe_unused]]以忽略該警告:
for ([[maybe_unused]]auto i : std::views::iota(0u, 2u)) {
std::cout << str << "\n";
}
uj5u.com熱心網友回復:
隨著auto i你永遠不會在任何地方使用變數。
隨著for ( unsigned i=0; i < max_iter; i )您使用i兩次,一次i < max_iter又一次,i 因此使用了變數
轉載請註明出處,本文鏈接:https://www.uj5u.com/qianduan/404983.html
標籤:
上一篇:如何用資料框上的條件替換NaN
