免费注册 查看新帖 |

Chinaunix

  平台 论坛 博客 文库
12
最近访问板块 发新帖
楼主: DraculaW
打印 上一主题 下一主题

[C++] VC10最新Update 将加入 Lambdas, auto, rvalue reference 还有 static_assert [复制链接]

论坛徽章:
0
11 [报告]
发表于 2008-08-04 15:09 |只看该作者
static_assert

从名字上看 可以很容易的看出 他是在编译期的assert
  1. template <int N> struct Fib
  2. {
  3.     enum
  4.     {
  5.         Val = Fib <N -1> ::Val   +   Fib <N   -2> ::Val
  6.     };

  7. };

  8. template   <>   struct   Fib <0> {enum   {Val   =   0};};
  9. template   <>   struct   Fib <1> {enum   {Val   =   1};};
复制代码

这段代码大家都应该不陌生了吧
但是如果我这么来呢

  1. Fib<-1>::Val;
复制代码


static_assert就是做这个事情的

  1. static_assert(N >= 0, "Fib <N> requires N >= 0.");
复制代码


如果我们继续像

  1. Fib<-1>::Val;
复制代码

来的话 cl.exe应该会报说

  1. main.cpp(xxx): error Cxxxx: Fib <N> requires N >= 0.
复制代码

论坛徽章:
0
12 [报告]
发表于 2008-08-04 15:37 |只看该作者
rvalue reference 相关的文章就比较多了 譬如说
http://www.open-std.org/jtc1/sc2 ... ers/2006/n2027.html

论坛徽章:
0
13 [报告]
发表于 2008-08-04 17:47 |只看该作者
小博GG开专题了啊~~

论坛徽章:
0
14 [报告]
发表于 2008-08-04 18:37 |只看该作者
提示: 作者被禁止或删除 内容自动屏蔽

论坛徽章:
0
15 [报告]
发表于 2008-08-04 20:03 |只看该作者
lambdas

  1. #include <algorithm>
  2. #include <iostream>
  3. #include <ostream>
  4. #include <vector>
  5. using namespace std;

  6. int main() {
  7.     vector<int> v;

  8.     for (int i = 0; i < 10; ++i) {
  9.         v.push_back(i);
  10.     }

  11.     for_each(v.begin(), v.end(), [](int n) { cout << n << " "; });
  12.     cout << endl;
  13. }
复制代码


很明显 和函数对象很像

  1. #include <algorithm>
  2. #include <iostream>
  3. #include <ostream>
  4. #include <vector>
  5. using namespace std;

  6. struct Print{
  7.     void operator()(int n) const {
  8.         cout << n << " ";
  9.     }
  10. };

  11. int main() {
  12.     vector<int> v;

  13.     for (int i = 0; i < 10; ++i) {
  14.         v.push_back(i);
  15.     }

  16.     for_each(v.begin(), v.end(), Print());
  17.     cout << endl;
  18. }

复制代码


lambdas中可以使用表达式,if语句  可以像其它函数一样返回各种类型 当然 它的返回类型是我们刚才所说的auto的
当然 自己也可以指定返回类型

  1. #include <algorithm>
  2. #include <deque>
  3. #include <iostream>
  4. #include <iterator>
  5. #include <ostream>
  6. #include <vector>
  7. using namespace std;

  8. int main() {
  9.     vector<int> v;

  10.     for (int i = 0; i < 10; ++i) {
  11.         v.push_back(i);
  12.     }

  13.     deque<double> d;

  14.     transform(v.begin(), v.end(), front_inserter(d), [](int n) -> double {
  15.         return n*1.0;
  16.     });
  17. }

复制代码


g++ 的0x支持和VC的差不多
见如下链接:
http://gcc.gnu.org/projects/cxx0x.html

论坛徽章:
0
16 [报告]
发表于 2008-08-04 21:29 |只看该作者
Mark,关注,但不应盲目~~~

论坛徽章:
0
17 [报告]
发表于 2008-08-04 23:59 |只看该作者
是不是函数式编程语言Erlang最近流行啊,造成C++也想往函数式方向发展

论坛徽章:
0
18 [报告]
发表于 2008-08-05 02:22 |只看该作者
原帖由 reiase 于 2008-8-4 23:59 发表
是不是函数式编程语言Erlang最近流行啊,造成C++也想往函数式方向发展

支持lambda,只是为了消除过多的小函数对象,便于编程,同时也避免了定义和使用的逻辑分离

论坛徽章:
0
19 [报告]
发表于 2008-08-05 09:14 |只看该作者
原帖由 tyc611 于 2008-8-5 02:22 发表

支持lambda,只是为了消除过多的小函数对象,便于编程,同时也避免了定义和使用的逻辑分离


Erlang Haskell 感兴趣了可以学一学 可能和前些年的python ruby差不多地位

lambda 的debug该怎么弄呢 我非常好奇...
不知道GDB是怎么实现的
您需要登录后才可以回帖 登录 | 注册

本版积分规则 发表回复

  

北京盛拓优讯信息技术有限公司. 版权所有 京ICP备16024965号-6 北京市公安局海淀分局网监中心备案编号:11010802020122 niuxiaotong@pcpop.com 17352615567
未成年举报专区
中国互联网协会会员  联系我们:huangweiwei@itpub.net
感谢所有关心和支持过ChinaUnix的朋友们 转载本站内容请注明原作者名及出处

清除 Cookies - ChinaUnix - Archiver - WAP - TOP