這個問題在這里已經有了答案: Lambda 捕獲和具有相同名稱的引數 - 誰會影響另一個?(clang vs gcc) (2個答案) 16 小時前關閉。
這段代碼用g 編譯,沒有檢測到沖突,雖然s是lambda捕獲的引數和lambda引數。我的編譯器是 g 。
gcc 版本是
gcc (Debian 4.9.2-10 deb8u2) 4.9.2
Copyright (C) 2014 Free Software Foundation, Inc.
我正在使用這些編譯標志:
-W
-Wall
-ansi
-pedantic
-s
-march=native
-flto
-fwhole-program
-Wfatal-errors
-Wextra
-std=c 1y
-frename-registers
-fipa-pta
-Ofast
-pedantic-errors
-fira-loop-pressure
-fomit-frame-pointer
-fforce-addr
-falign-functions
-fno-cprop-registers
-fstrength-reduce
代碼是
#include <vector>
#include <algorithm>
#include <iostream>
int main (int argc, char* argv []) {
int s (0);
std::vector<int> vec ({3, 5, 13, 1});
std::for_each (vec.begin (), vec.end (), [&s] (const int& s) {
s = s>s?s:s;
});
std::cout << "max ox v is " << s << std::endl;
}
是否有編譯選項來檢測這種錯誤?
uj5u.com熱心網友回復:
升級你的編譯器。
基于https://godbolt.org/z/h3Y7dW1dP,gcc-std=c 17 8.5(帶有)和 clang 7.1.0缺少警告。
您應該升級到 gcc 9.1 和 clang 8.0.0 或更高版本。(最好是很久以后。)
轉載請註明出處,本文鏈接:https://www.uj5u.com/net/495539.html
