C lambda后跟()vs. lambda没有()

C lambda后跟()vs. lambda没有(),第1张

概述这两段代码有什么区别? struct HighResClock{ typedef long long rep; typedef std::nano period; typedef std::chrono::duration<rep, period> 这两段代码有什么区别?

struct HighResClock{    typedef long long                               rep;    typedef std::nano                               period;    typedef std::chrono::duration<rep,period>      duration;    typedef std::chrono::time_point<HighResClock>   time_point;    static const bool is_steady = true;    static time_point Now();};namespace{    auto g_Frequency = []() -> long long    {        std::cout<<"HERE";        LARGE_INTEGER frequency;        queryPerformanceFrequency(&frequency);        return frequency.QuadPart;    }();}HighResClock::time_point HighResClock::Now(){    LARGE_INTEGER count;    queryPerformanceCounter(&count);    return time_point(duration(count.QuadPart * static_cast<rep>(period::den) / g_Frequency));}int main(){    HighResClock c;    c.Now();    c.Now();    c.Now();}

struct HighResClock{    typedef long long                               rep;    typedef std::nano                               period;    typedef std::chrono::duration<rep,period>      duration;    typedef std::chrono::time_point<HighResClock>   time_point;    static const bool is_steady = true;    static time_point Now();};namespace{    auto g_Frequency = []() -> long long    {        std::cout<<"HERE";        LARGE_INTEGER frequency;        queryPerformanceFrequency(&frequency);        return frequency.QuadPart;    };}HighResClock::time_point HighResClock::Now(){    LARGE_INTEGER count;    queryPerformanceCounter(&count);    return time_point(duration(count.QuadPart * static_cast<rep>(period::den) / g_Frequency()));}int main(){    HighResClock c;    c.Now();    c.Now();    c.Now();}

如果你没有注意到,差异是下面的括号:

auto g_Frequency = []() -> long long{    LARGE_INTEGER frequency;    queryPerformanceFrequency(&frequency);    return frequency.QuadPart;}(); //this bracket here appears in one and not the other..

我问,因为带括号的那个只打印一次“Here”,而另一个(没有括号)打印3次.括号是什么意思,它有什么作用?括号中是否有此语法的名称?

解决方法 在lambda定义[] {}()之后立即写();将调用lambda,因此结果是lambda的返回类型的类型.

如果省略()后缀,将返回lambda类型(未指定),这基本上是一个可调用的函子.

auto result = []{ return 42; }(); // auto is integer,result has 42 in it  auto result1 = []{ return 42; }; // auto is some unspecifIEd lambda type  auto result2 = result1(); // auto is integer,result2 is storing 42` ......................^^ - this is the bracket you can also put directly after the deFinition of the lambda
总结

以上是内存溢出为你收集整理的C lambda后跟()vs. lambda没有()全部内容,希望文章能够帮你解决C lambda后跟()vs. lambda没有()所遇到的程序开发问题。

如果觉得内存溢出网站内容还不错,欢迎将内存溢出网站推荐给程序员好友。

欢迎分享,转载请注明来源:内存溢出

原文地址: https://outofmemory.cn/langs/1215702.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2022-06-05
下一篇 2022-06-05

发表评论

登录后才能评论

评论列表(0条)

保存