lambda返回值类型推断规则

lambda返回值类型推断规则

本文介绍了C ++ 0x lambda返回值类型推断规则的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧! 问题描述 29岁程序员,3月因学历无情被辞! 考虑以下VC ++ 10.0代码中的两个lambda函数: template< typename T& void eq(uint fieldno,T value){ table * index_table = db.get_index_table(fieldno); if(index_table == nullptr)return; std :: set< uint> recs; index_table-> scan_index< T>(值,[&](uint recno,T n) - > bool { if(n!= value)return false; recs .insert(recno); return true; }); add_scalar_hits(fieldno,recs).is_hit = [=](tools :: wsdb :: field_instance_t& inst){ return boost :: get< T& ; }; } 在第一个lambda函数中,我被迫使用 - > bool 返回类型说明,而在第二个lambda中,编译器非常乐意推断返回类型。 :何时可以编译器推断lambda上的返回类型? 解决方案只有当你有一个简单的单行吗? 是的。根据最新的公共C ++ 0x草案(§5.1.2/ 4),因此,您的第一个lambda表达式被解释为返回 void ,这是不正确的,因此您需要添加 - > bool 以明确指定返回类型。 Consider the two lambda functions in the following VC++ 10.0 code:template <typename T>void eq(uint fieldno, T value) { table* index_table = db.get_index_table(fieldno); if (index_table == nullptr) return; std::set<uint> recs; index_table->scan_index<T>(value, [&](uint recno, T n)->bool { if (n != value) return false; recs.insert(recno); return true; }); add_scalar_hits(fieldno, recs).is_hit = [=](tools::wsdb::field_instance_t& inst) { return boost::get<T>(inst) == value; };}In the first lambda function, I was forced to use the ->bool return type specification whereas in the second lambda the compiler was perfectly happy to infer the return type.My question is: when can the compiler infer the return type on a lambda? Is it only when you have a simple one-liner? 解决方案 "Is it only when you have a simple one-liner?"Yes. According to the latest public C++0x draft (§5.1.2/4), Therefore, your first lambda expression is interpreted as returning void, which is not right, so you need to add a -> bool to explicitly specify the return type. 这篇关于C ++ 0x lambda返回值类型推断规则的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持! 上岸,阿里云!
08-24 08:03