C++ 14

似乎 c++11 的标准刚刚尘埃落定,c++14 的标准也开始被人提起。从 c++03 到 c++11 经过了漫长的 8 年,这次倒是更新的格外的快。按照 wiki 上的说法就是这是对 C++11 的小型修正和扩展,就跟 C++03 与 C++98 之间的关系类似。本文参考这个 blog 系列(123)。

polymorphic allocator

最早这个概念大约是从 boost.allocator 还是什么和 allocator 相关的 blog 里面看到的,据说就是现在的 allocator 有一个类型参数,但其实我们并不需要为不同的类型准备不同的 allocator,我们应该使用相同的代码来分配内存,类型在这里只是为了类型安全。

数组与 class 一致的初始化方法

就是前者常用 {} 初始化也应该能引入 struct/class 定义的对象,同时允许嵌套这种定义。

std::optional

来自 boost.optional 的一种方式,表示函数返回值可能存在一种“不返回”的状态,这往往意味着输入有问题,原先的做法有通过 assert 或者抛出异常。通过 option 可以隐式转换成 boolean 来判断是否结果被初始化,这避免了类似前面需要返回 std::pair<T, bool> 来解决无返回值但仍然得初始化前者的困境。

OpenMP 在语言 level 的支持

比如 parallelfor,其实我倒是觉得这个没啥用,原先的 #pragma 挺好用的呀。

literal 在 STL 里面支持

这个算是原先 literal 的完整化支持。

dynamic array

所谓 dynamic array,就是希望在可能的时候在 stack 上分配动态大小的数组,希望通过 std::dynarray 来实现,std::array 的大小通过模板参数指定的,因此是 compile-time 的。

concurrent queue

即提供 pop/push 是 atomic 操作的 queue。

pipeline

可以通过 | 类似的操作符将一些 functor 连接起来(类似某种 DSL),其实也不难写了,就是默认没有这个实现。boost.iostreams 里面的 filter 是可以类似的叠起来的。

stream mutex

使得我们通过 stream 输出的操作变成 atomic 的。

sized delete

对 operator delete 的完善。

澄清 memory allocation

不是太清楚问题所在。

传值还是常值引用

这个是为了避免同一对象既作为输入又作为输出时产生的问题(可能两次引用的值却不一样)。

大整数支持

类似 mpc/gmp 等库?

优先队列的完整支持

将某些 heap 直接弄成不同的 priority queue,而不是现在仅有 n-ary heap 的实现。

integral_constant

对 MPL 的 integral_constant 的改进。

transformation traits

简化一些 type 运算,如去掉 const 等修饰符。

random

一些改进,如对 algorithm 的支持。

特殊数学函数的条件支持

既不是必需实现的。

object alias

帮助在不同的环境下获得同一个对象不同的用法,比如不同精度的 \pi

swap operator

使用 :=:。

algorithm 的并并行化

这大概是并行方面普及之后自然的扩展。

URI 的支持

hmm…

thread local storage

这个也算是顺理成章了吧?

fork-join

哈哈,不要告诉我还有 gpars 里面其他几个呢!

异步操作的标准化

挺好的,这部分随着接口的成熟应该走上这一步了。

generic lambda

类似匿名函数也支持模板?

对 lambda 的简化等

比如允许直接写个 expression。

vector loop

使用 SIMD。

executor 和 scheduler

这个类似 java 里面的两个接口的概念了,能够简化多线程程序的实现。

mapreduce 支持

据说曾经提议过。

resumable functions

增加 resumable 关键字,主要为异步操作所用。

ip 支持

hmm…

shared locking

对 mutex 的一个补充。

quoted string

主要是 string 输出到 stream 读回来时因为空格之类的东西使得两个操作并不对称,通过增加 manipulator 来解决这个问题。

对 SIMD 的支持

跟前面某个类似。

unicode 的支持

似乎大家都用那个事实标准了…

unordered container 的异质类型支持

这个还包括对 hash 的一些修补。

stateful function 转换成 function pointer

为了让这些函数能再 C 里面用?

额外的 allocator

hmm…

rule of 5

这大概就是说什么时候自动生成 copy constructor 之类的。

signature trait

简化函数相关的 meta programming

concept lite

曾经被拒了,这次卷土重来…

delimited iterator

为了修正那个该死的 ostream_iterator。

返回类型推断

嗯… 不知道能做到 scala 那种不?

constexpr 的运行时优化

hmm

通过类型访问 tuple

听起来像是 boost.fusion 里面的功能…

map 和 set 的 splice 方法

hmm…

for-then-else

这个暂时不晓得有啥必要…

make_unique

据说有个 make_shared… 土了

transaction 支持

这个居然有三个…

std::joinstd::split

hmm

ADL 的简化

其实一直不晓得这个多复杂,只是觉得很神奇

template 特化的代码重用

嗯,支持,少写 code!

对 constexpr 函数的限制减少

hmm

似乎没看到 yield 的支持 ~><~

——————
And Isaac said unto his son, How is it that thou hast found it so quickly, my son? And he said, Because the LORD thy God brought it to me.

C++ 14

一个有关“C++ 14”的想法

  1. zt 说:

    哈哈,重新看了一下上面的一些东西,觉得类似 optional 的思路是不是跟 functional programming 有点关系,不知道啥时候搞点 Try 什么的玩玩…

发表评论

Fill in your details below or click an icon to log in:

WordPress.com Logo

You are commenting using your WordPress.com account. Log Out / 更改 )

Twitter picture

You are commenting using your Twitter account. Log Out / 更改 )

Facebook photo

You are commenting using your Facebook account. Log Out / 更改 )

Google+ photo

You are commenting using your Google+ account. Log Out / 更改 )

Connecting to %s