Joh*_*n P 0 c++ lambda types c++14
我发现这种奇怪的行为__PRETTY_FUNCTION__
,但奇怪的部分更多地与我认为是正确的行为而不是在解码中的怪癖.我错了.
auto lambda1 = [] { return __PRETTY_FUNCTION__; };
auto lambda2 = [] { return __PRETTY_FUNCTION__; };
//static_assert(std::is_same<decltype(lambda1), decltype(lambda2)>(), "Distinct types!");
std::cout << pretty(lambda1) << "\n" << pretty(lambda2) << std::endl;
lambda1(); // ...with T = main(int, const char**)::<lambda()>
lambda2(); // ...with T = main(int, const char**)::<lambda()>
Run Code Online (Sandbox Code Playgroud)
现在,我并不感到惊讶的是,他们不被认为是同一类型 - 只是他们是独特的,并没有在他们的签名中反映出来.(当lambdas返回null时,它的工作方式相同.)为什么会这样?
我还要指出,返回类型根本没有显示,我从未在常规函数中看到过.我确定返回类型是强类型的并且是lambda类型的基本部分,那么为什么它会被省略?
每个lambda 表达式表示唯一的闭包类型.
lambda表达式的类型(也是闭包对象的类型)是一个唯一的,未命名的非联合类类型,称为闭包类型,其属性如下所述.
至于为什么__PRETTY_FUNCTION__
渲染相同的东西,你必须问实施者(它不是一个标准的宏),但是猜测很难去除一个既独特又有代表性的名称.
归档时间: |
|
查看次数: |
56 次 |
最近记录: |