Tre*_*key 75 c++ lambda function auto c++11
#include <iostream>
int main(){
auto lambda = [] {
return 7;
};
std::cout << lambda() << '\n';
}
Run Code Online (Sandbox Code Playgroud)
该程序编译并打印7.
lambda的返回类型基于返回值7推导为整数类型.
为什么普通功能不能实现这一点?
#include <iostream>
auto function(){
return 42;
}
int main(){
std::cout << function() << '\n';
}
Run Code Online (Sandbox Code Playgroud)
错误:'function'函数使用'auto'类型说明符而没有尾随返回类型
Mar*_*cia 77
C++ 14具有此功能.您可以通过设置-std=c++1y
标志来测试新版本的GCC或clang .
除此之外,在C++ 14中,您还可以使用decltype(auto)
(decltype(auto)
作为变量的镜像)为您的函数使用decltype
语义推导其返回值.
一个例子是转发功能,对此decltype(auto)
特别有用:
template<typename function_type, typename... arg_types>
decltype(auto) do_nothing_but_forward(function_type func, arg_types&&... args) {
return func(std::forward<arg_types>(args)...);
}
Run Code Online (Sandbox Code Playgroud)
通过使用decltype(auto)
,您可以模拟func
使用指定参数调用时的实际返回类型.在尾随返回类型中没有更多的代码重复,这在C++ 11中非常令人沮丧且容易出错.
我的猜测是,这可能是因为类型推断的lambdas不能递归.
为什么这很重要?因为如果类型推断的lambda可以是递归的(通过"类型推断"我的意思是变量的名称是类型的地方auto
),那么它的返回类型可能可能依赖于它自己 - 虽然这有时可以解决,但它很多比"简单"类型推断更难实现.我甚至不确定它是否总是可以解决的(在一般情况下它是否可以判定?).但是,如果函数支持类型推断,则必须考虑此问题,因此可能由于这个原因它们只是将它们排除在外.
归档时间: |
|
查看次数: |
5138 次 |
最近记录: |