http://clang.llvm.org/docs/BlockLanguageSpec.txt
看起来很酷。
然而,
有谁可以启发我这个?
答案 0 :(得分:14)
块本质上是一种将代码和范围作为数据传递的方法。它们在其他一些语言中被称为闭包和匿名函数。
这是article,其中包含更多详细信息和代码示例。
答案 1 :(得分:10)
NanoTech已经与块的解释相关联。至于这与C ++的关系,请允许我说出我的个人意见:这个扩展名 在C ++中很有用。原因如下:
关于块引用类型:我们已经具有“多态函数”,它可以带有一些状态,请参阅boost::function,tr1::function。 C ++将在其下一个标准库中包含一个抛光版本。 “C Blocks”的优势在于您不需要处理Block_copy
和Block_release
之类的问题。这些多态函数对象足够聪明,可以自己管理内存。
关于块文字语法:这是一个很好的语法,允许您将代码放在“所属”的位置,而无需太多的样板代码。但这同样适用于其C ++计数器部分:C++0x lambdas。但是C ++ 0x lambda特性还允许您在紧密的内部循环中使用lambda对象,而不会因为可能的内联而导致函数调用的高性能成本。
由于C ++ 0x lambdas也可用于性能有问题且std :: function更易于处理w.r.t.内存管理向C ++添加“C块”似乎是多余的。 “C blocks”似乎更适合不支持模板或析构函数的语言。
答案 2 :(得分:5)
有关块及其工作原理的更多信息,请参阅以下内容:
答案 3 :(得分:2)
它们基本上只是Apple的closures /匿名函数的术语。正如Nikolai所说,他们就是如何使用Grand Central Dispatch并行运行多个功能(因此使用超过1个核心),而不必担心线程和锁定。
答案 4 :(得分:0)
据我所知,此扩展适用于Apple的Grand Central Dispatch框架。块是可以并行运行的小型可调度/可排队实体。