/Zc:lambda
(啟用更新的 Lambda 處理器)
編譯程式 /Zc:lambda
選項可啟用符合 Lambda 文法和處理支援。
語法
/Zc:lambda
[-
]
備註
編譯 /Zc:lambda
程式選項會啟用符合規範的 Lambda 處理器。 它會根據C++標準來剖析及實作 Lambda 程式代碼。 此選項預設為關閉,它會使用舊版 Lambda 處理器。 當您使用預設 /std:c++14
或 /std:c++17
編譯程式選項時,請使用此選項來啟用泛型 Lambda 的一致性模式語法檢查。
/Zc:lambda
由 、 [/std:c++latest
] (std-specify-language-standard-version.md] 和 /experimental:module
/permissive-
選項自動啟用/std:c++20
。 您可以使用 明確 /Zc:lambda-
停用它。
此選項 /Zc:lambda
可從 Visual Studio 2019 16.8 版開始提供。 /experimental:newLambdaProcessor
從 Visual Studio 2019 16.3 版開始,現在已淘汰此拼字。
舊版 Lambda 處理器在剖析和編譯 Lambda 時有限制。 例如,此符合程式代碼的程式代碼會在下 /Zc:lambda
正確編譯,但在下 /Zc:lambda-
回報錯誤:
void f1()
{
constexpr auto c_value = 1;
auto func = []()
{
return c_value; // error C3493: 'c_value' cannot be implicitly captured
// because no default capture mode has been specified
};
func(); // error C2064: term does not evaluate to a function taking 0 arguments
}
舊版 Lambda 處理器會編譯此程式代碼,但新的 Lambda 處理器會產生錯誤 C2760:
void f2() {
auto a = [](auto arg) {
decltype(arg)::Type t; // C2760 syntax error: unexpected token 'identifier', expected ';'
};
}
此範例顯示正確的語法,現在由編譯程式在 下 /Zc:lambda
強制執行:
void f3() {
auto a = [](auto arg) {
typename decltype(arg)::Type t;
};
}
在 Visual Studio 中設定這個編譯器選項
開啟專案的 [屬性頁] 對話方塊。 如需詳細資料,請參閱在 Visual Studio 中設定 C ++ 編譯器和組建屬性。
選取 [組態屬性]>[C/C++]>[命令列] 屬性頁。
將 或
/Zc:lambda-
新增/Zc:lambda
至 [其他選項:] 窗格。