浏览 228 次
|
精华帖 (0) :: 良好帖 (0) :: 新手帖 (0) :: 隐藏帖 (0)
|
|
|---|---|
| 作者 | 正文 |
|
最后更新时间:2008-08-05
首先是 auto
C++98的auto基本属于一个无用的关键字 在0x中 它被引入了新的语义 如下代码
for (auto i = m.begin(); i != m.end(); ++i) {
cout << i->second << " are " << i->first << endl;
}
被auto声明的变量会被编译器看作它被初始化的那个变量 在某些时刻可以用用 其次是 static_assert 下面这样的代码
template <int N> struct Fib
{
enum
{
Val = Fib <N -1> ::Val + Fib <N -2> ::Val
};
};
template <> struct Fib <0> {enum {Val = 0};};
template <> struct Fib <1> {enum {Val = 1};};
大家都应该不陌生了吧 但是如果我这么来呢 Fib<-1>::Val; static_assert就是用来在编译期报出这样的错 而且是以用户定义的语句 不会是看起来让人头晕的编译器error static_assert(N >= 0, "Fib <N> requires N >= 0."); 这样的代码 编译器会说 main.cpp(xxx): error Cxxxx: Fib <N> requires N >= 0. 而不是什么一大串fatal error阿 下来就是lambdas了 各位精通各种脚本的牛人可能已经非常的熟悉这个领域了 我就简单的说一下好了
int main() {
vector<int> v;
for (int i = 0; i < 10; ++i) {
v.push_back(i);
}
for_each(v.begin(), v.end(), [](int n) { cout << n << " "; });
cout << endl;
}
下面是个稍微复杂点的例子 显示lambdas的返回值
int main() {
vector<int> v;
for (int i = 0; i < 10; ++i) {
v.push_back(i);
}
deque<double> d;
transform(v.begin(), v.end(), front_inserter(d), [](int n) -> double {
return n*1.0;
});
}
感觉这个只是一些语法糖 我用函数对象照样可以完成的阿 而且lambda的调试应该怎么样做呢? 非常好奇MS和Gdb他们的实现 声明:JavaEye文章版权属于作者,受法律保护。没有作者书面许可不得转载。
|
|
| 返回顶楼 | |


