簡體   English   中英

可變參數模板函數是否以相反順序調用lambda參數?

[英]Does variadic template function call lambda parameter in reverse order?

下面的演示打印21而不是12 為什么?

#include <iostream>
template<class... F> void callMany(F... fib){
    [&](...){}(
        (fib(),123)... 
    );
}
int main()
{
    auto f1=[&](){std::cout<<"1";};
    auto f2=[&](){std::cout<<"2";};
    callMany(f1,f2);
}

我用vc ++和g ++對其進行了測試。 兩者的結果是相同的。

這是標准行為嗎? 如果是這樣,有哪些規則,為什么?
它取決於編譯器嗎?

一種方法可以逆轉它,但我認為這有點無關。

當評估包含包擴展的表達式時,首先擴展包-可以簡單地實例化代碼,可以說,無需執行任何評估-即可根據通常的規則對結果表達式進行評估。 你的表情

[&](...){}(
    (fib(),123)... 
);

擴展為

[&](...){}(
    (f1(),123), (f2(),123)
);

並且由於函數參數是按未指定的順序求值的,因此您不能依賴於在f1之前調用f2反之亦然。

暫無
暫無

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

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