分享方式:


/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 中設定這個編譯器選項

  1. 開啟專案的 [屬性頁] 對話方塊。 如需詳細資料,請參閱在 Visual Studio 中設定 C ++ 編譯器和組建屬性

  2. 選取 [組態屬性]>[C/C++]>[命令列] 屬性頁。

  3. 將 或 /Zc:lambda- 新增/Zc:lambda至 [其他選項:] 窗格。

另請參閱

/Zc (一致性)
/std (指定語言標準版本)