【问题标题】:Is there a new function type expression format in C++11?C++11 中是否有新的函数类型表达式格式?
【发布时间】:2013-04-23 21:29:17
【问题描述】:

今天我查看了Stroustrup's C++11 FAQ(2013 年 4 月 7 日修改)并在 type-alias 部分的末尾看到了这个:

typedef void (*PFD)(double);    // C style
using PF = void (*)(double);    // using plus C-style type
using P = [](double)->void;     // using plus suffix return type

其中 lambda 引入器用于启动使用后缀样式返回类型的通用函数类型表达式。这是官方的,还是放弃的测试版/愿望清单功能?如果它是官方的,它将如何用于非静态成员函数?

【问题讨论】:

    标签: c++ c++11 function-prototypes


    【解决方案1】:
    using P = [](double)->void;
    

    不是官方的。众所周知,Bjarne 在他的常见问题解答中有点粗心。

    但是,以下是有效的:

    using P1 = auto(double) -> void;
    using P2 = auto(*)(double) -> void;
    

    其中P1 是函数类型,P2 是函数指针类型。也许这就是他的意图。

    【讨论】:

    • 所以 Bjarne 的第三个条目是利用 stateless-lambda=to=regular-function 转换,对吧?在阅读本文之前,我进行了实验,发现“auto (MyClass::*)(Whatever) CV -> ReturnType”有效。
    • @CTMacUser:不,它没有。 using 需要一个类型,[](stuff)->stuff 是一个不完整的 lambda 对象。是的,这就是语法,就像普通的成员函数指针一样,除了尾随返回类型。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2012-09-01
    • 1970-01-01
    • 2014-12-19
    • 2021-12-24
    相关资源
    最近更新 更多