c++ 11 你应该了解! 博客分类: C++ c++
程序员文章站
2024-03-08 21:45:28
...
Alex 在他的网站上 写了一篇 C++ 11 的 cheatsheet,其中写到了 C++ 的 03 标准和 11 标准之间的差别。
我简单验证了一下:
null pointer const
上面的这个例子直接报错,看来现在默认的编译器都没有这么傻了。
standard types
我一直用 {,u}int{8,16,32,64}_t 来表示涉及到长度的类型,很好用。
raw string literals
平时用的不多,不过确实很方便,我们不用再纠结转义字符啦。这个在 clang++ 和 -std=c++11 的参数下通过。
in class memeber initializer
不过我之前都还是习惯在构造函数中把需要初始化的变量写一遍,养成的习惯想一下子改估计是不太可能了。
delegating constructor
这个挺方便的,符合开发人员的直觉这点,为什么之前一定要写个辅助函数呢。现在有个这个功能,只要有个基本的初始化函数就可以了。
override
可以帮助人们检查出由于 typo 而产生的奇怪错误,非常好。
final
我擦,啥时候 c++ 也有这个 final 关键词了?这个本人不觉明历,需要多了解下之后再来发表评论。
static_assert
终于加入标准支持了,不用再自己造*了,虽然造这个*也不难。
type traits
自然可以想到可以在 template 上写很多有趣的东西,看到写出来这样的代码还是很神奇的:
auto
这个我个人认为是新标准中最最有用的功能,再怎么称赞它都不为过,它让我不用再纠结 iterator 的具体类型,我只要关心我的逻辑就可以了。没有了auto,你写个 lambda的表达式看看
decltype
既然我们在编译器阶段就知道了变量的类型,那么我们可以直接利用这点吗?现在你通过decltype这个操作符可以轻松的实现了。不过slide这里给的例子实际用途不大,没有展示decltype有用的地方。
而真正有意思的是利用这个来弄 suffix return type syntax
可以参见这个例子:
std::function/std::bind
个人对此无爱啊,就不多累赘了。
lambda
这个主题很有意思,下次有机会可以专门写个 blog。
std::tuple
不用 boost 库就可以享受到一个容器存放不同类型的好处,妙哉!
我简单验证了一下:
null pointer const
void foo(char *); void foo(int); foo(NULL)
上面的这个例子直接报错,看来现在默认的编译器都没有这么傻了。
standard types
我一直用 {,u}int{8,16,32,64}_t 来表示涉及到长度的类型,很好用。
raw string literals
平时用的不多,不过确实很方便,我们不用再纠结转义字符啦。这个在 clang++ 和 -std=c++11 的参数下通过。
in class memeber initializer
不过我之前都还是习惯在构造函数中把需要初始化的变量写一遍,养成的习惯想一下子改估计是不太可能了。
delegating constructor
这个挺方便的,符合开发人员的直觉这点,为什么之前一定要写个辅助函数呢。现在有个这个功能,只要有个基本的初始化函数就可以了。
override
可以帮助人们检查出由于 typo 而产生的奇怪错误,非常好。
final
我擦,啥时候 c++ 也有这个 final 关键词了?这个本人不觉明历,需要多了解下之后再来发表评论。
static_assert
终于加入标准支持了,不用再自己造*了,虽然造这个*也不难。
type traits
自然可以想到可以在 template 上写很多有趣的东西,看到写出来这样的代码还是很神奇的:
typedef int mytype[][24][60]; cout << "(0 dim.): " << extent<mytype,0>::value << endl; cout << "(1 dim.): " << extent<mytype,1>::value << endl; cout << "(2 dim.): " << extent<mytype,2>::value << endl;
auto
这个我个人认为是新标准中最最有用的功能,再怎么称赞它都不为过,它让我不用再纠结 iterator 的具体类型,我只要关心我的逻辑就可以了。没有了auto,你写个 lambda的表达式看看
decltype
既然我们在编译器阶段就知道了变量的类型,那么我们可以直接利用这点吗?现在你通过decltype这个操作符可以轻松的实现了。不过slide这里给的例子实际用途不大,没有展示decltype有用的地方。
而真正有意思的是利用这个来弄 suffix return type syntax
可以参见这个例子:
template<class T, class U> auto add(T x, U y) -> decltype(x+y) { return x+y; }
std::function/std::bind
个人对此无爱啊,就不多累赘了。
lambda
这个主题很有意思,下次有机会可以专门写个 blog。
std::tuple
不用 boost 库就可以享受到一个容器存放不同类型的好处,妙哉!
推荐阅读
-
c++ 11 你应该了解! 博客分类: C++ c++
-
c++ 11 你应该了解! 博客分类: C++ c++
-
C++中的一个小问题 博客分类: 技术笔记 C++编译器
-
Bjam简明教程 博客分类: C++ GCCPHP.net
-
c++ lambda表达式 博客分类: c++ c++lambda汇编gdb
-
GDB 笔记 博客分类: C/C++ gdb
-
[大部分转载]TinyXml笔记 博客分类: C++ XMLGCCVC++Linux多线程
-
C/C++源代码到可执行程序的过程详解 博客分类: gdb gdb
-
Gcc or G++用dll 博客分类: C++ GCC
-
C++之Boost使用 博客分类: Linux和开源软件 C++BoostLinux