今天我退房了 Stroustrup的C ++ 11常见问题解答 (2013年4月7日修改)并在类型别名部分的末尾看到了这一点:
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介绍器用于启动使用后缀样式返回类型的通用函数类型表达式。这是官方的,还是掉线的测试/愿望清单功能?如果它是官方的,它对非静态成员函数有什么作用?
using P = [](double)->void;
不是官方的。众所周知,Bjarne在他的常见问题解答中有点粗心。
但是,工作原理如下:
using P1 = auto(double) -> void;
using P2 = auto(*)(double) -> void;
哪里 P1
是一个函数类型,和 P2
是一个函数指针类型。也许那是他的意图。
using P = [](double)->void;
不是官方的。众所周知,Bjarne在他的常见问题解答中有点粗心。
但是,工作原理如下:
using P1 = auto(double) -> void;
using P2 = auto(*)(double) -> void;
哪里 P1
是一个函数类型,和 P2
是一个函数指针类型。也许那是他的意图。
Lambda语法不能与非静态成员函数一起使用,因为指向函数的指针和指向成员的指针函数的实现方式不同。指向成员的函数不是常规指针。它不像常规指针那样保存“确切地址”。我们可以想象它保存了函数在类布局中的“相对地址”。
如果你需要在某处传递指向成员函数的指针,那么cosider std :: function用法。