31 1234
发新话题
打印

重识C++的魅力

重识C++的魅力

用c++好多年了,自己感觉对它已经比较了解,但今天又一次学习boost时(为什么说又一次? 因为每次都不彻底,最后均放弃了), 不禁为它的魅力所倾倒,感叹自己对c++的了解的片面。下面列举几个使用boost库的例子,相信如果你没有看过类似代码的话,你一定也会很震惊。

boost是一个c++类库(好像说模板库更为合适),由C++标准委员会库工作组成员发起,是不折不扣的c++准标准库,内容涵盖了文件系统、线程、字符串、数值计算等等等等诸多方面。Boost功能之强大就不多说了,只是想借它的某些代码来给大家展示一下c++的魅力。


例1: 奇妙的赋值操作
复制内容到剪贴板
代码:
#include <vector>
#include <boost/assign.hpp>
using namespace boost::assign;

std::vector<int> v;
v += 1,2,3,4,5,6,7,8,9;

//相信吗?编译不会出错!
例2: 接受任意类型数据的变量
复制内容到剪贴板
代码:
#include <string>
#include <boost/any.hpp>

boost::any v = 100;
v = 'c';
v = std::string("str");
v = false;
v = 0.3;
例3: foreach
复制内容到剪贴板
代码:
#include <vector>
#include <iostream>
#include <boost/foreach.hpp>
#define foreach BOOST_FOREACH

std::vector<int> arr;
// add_some_elements_to(arr);

foreach(int n, arr)
    cout << n << endl;

// 是不是有点眼熟? oh, C# 的 "foreach"
例4: Bind与函数组合
复制内容到剪贴板
代码:
#include <boost/bind.hpp>
using namespace boost;

int f(int a) { return -a; }
int g(int a, int b) { return a + b; }

void main()
{
    int r;
    r = bind(g, 100, 200)();    //可以这样调用g(), r = 300
    r = bind(g, _1, 200)(100);    //r = 300
    r = bind(g, _1, _2)(100, 200);    //r = 300
    r = bind(g, _1, _1)(100, 200);    //r = 200
    r = bind(f, bind(g, _1, _2))(100, 200);    //r = f(g(x,y)) = 300

    //是不是感觉有点像printf() ?
}
例5: 最神奇的拉姆达表达式 (lambda expression)
复制内容到剪贴板
代码:
#include <boost/lambda/lambda.hpp>
using namespace boost::lambda;

int i = 1; int j = 2;
int r = (_1 + _2)(i, j);     // r = 3

// ??? 是的,请相信你的眼睛,_1 下滑线和1
好了,例子就先写到这吧,以后发现好的,再加上。(如果要安装boost,最快得 方法是下载installer)

需要说明的是,这些例子不是用来表现boost有多强大,多好用,而是用来说明c++语言是的博大!(请一定区分语言和类库的概念)。有人肯定会说,有什么强大的,c++能实现的,XX语言都能实现。的确,有很多语言都很好。但c++的强大在于:所有上面演示的功能,不是通过修改编译器来实现的,只是利用了c++语言已有的特性。想想运行在全世界所有电脑上的软件都在基于什么运行,就能体会为什么C++标准多少年来未曾改变。

读了BOOST的代码后,渐渐的产生了一种感觉:
有一种语言,就像十七八岁的少年,处在模仿和多变的年龄,躁动着...
有一种语言,就像四十岁左右的中年人,在这个多变的世界,以自己稳固的步伐,前进着...

[ 本帖最后由 stormelf 于 2008-1-9 03:14 编辑 ]
本帖最近评分记录
采菊东篱下, 悠然见南山.

TOP

<楼下传来一阵阵呕吐声>
采菊东篱下, 悠然见南山.

TOP

现在流行的动态语言几乎都是用c/c++写的。这已经很说明问题了。在某些时候,用boost库,不如学门动态语言。
第一个是要做线上促销;第二你要制定一个目标;第三你要倾听客户的心声;第四你要有效利用时间来改进你的系统;第五是对搜索的优化;第六,设计的时候就想到客服;第七,多元化;第八,好好利用你身边的关系。

TOP

boost是很牛比
该人过于帅呆 签名自动屏蔽

TOP

楼上的头像,好嫩啊
他第二次直接增加了10kg到197kg,这一成绩已经与世界纪录相同。果然压力过大没有成功。

TOP


完全看不懂,有啥好处嗫。
欢迎加入马甲1号粉丝会的二线粉丝会,reika粉丝会。
二线粉丝成员:CodeCoolie,Mzren,5bxb,超级小菜鸟,不知道歪 ,jonssen,Vista,withy

TOP

引用:
原帖由 5bxb 于 2008-1-9 10:17 发表
楼上的头像,好嫩啊

纯情学生妹。
欢迎加入马甲1号粉丝会的二线粉丝会,reika粉丝会。
二线粉丝成员:CodeCoolie,Mzren,5bxb,超级小菜鸟,不知道歪 ,jonssen,Vista,withy

TOP

我想先见识美刀的魅力后,再重识C++的魅力
美德是因为没有足够的诱惑。
简单的东西应该是简单的,复杂的东西应该是可能的。

TOP

我喜欢用直观,简单的语法
像 v += 1,2,3,4,5,6,7,8,9; 这种我是绝对不会用的

TOP

这样会比较难维护, 因为可能自己都看不懂

TOP

 31 1234
发新话题