簡體   English   中英

為什么不能在遞歸lambda函數中使用auto?

[英]Why can I not use auto in a recursive lambda function?

這是我的mergeSort方法中的代碼,

    std::function<void(std::vector<T>*)> mergeSortRange = [&](std::vector<T>* array) -> void {
        int length = (int) array->size();
        if (length < 2)
            return;
        std::vector<T>* leftArr = new std::vector<T>(array->begin(), array->begin() + length / 2);
        std::vector<T>* rightArr = new std::vector<T>(array->begin() + length / 2, array->end());
        mergeSortRange(leftArr);
        mergeSortRange(rightArr);
        mergeTwoSortedArrrays(leftArr, rightArr, array);
        delete leftArr;
        delete rightArr;
    };

我可以將第一行替換為:

auto mergeSortRange = [&](std::vector<T>* array) -> void ,我希望它能正常工作(對不起,請原諒)。

但是相反,編譯器抱怨說:

用'auto'聲明的變量'mergeSortRange'不能出現在它自己的初始化器中。

我已經指定了參數和返回類型。 有人可以對此有所啟發嗎?

您的程序格式錯誤,因為正如Riad所說,您試圖在推導類型之前調用該函數:

dcl.spec.auto/10如果需要使用具有未推導占位符類型的實體的類型來確定表達式的類型,則程序格式錯誤。 但是,一旦在函數中看到未丟棄的return語句,則從該語句推斷出的返回類型就可以在該函數的其余部分中使用,包括在其他return語句中。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM