技术开发 频道

C++0x探秘:访C++之父Bjarne Stroustrup

  是的,这些主要的新特性都很好,但是C++程序员们所关心的那些很重要的问题呢?

  · 传统的“threads-and-locks”风格的系统级并行计算的类型安全得到了支持。和一个可以用于无锁(lock-free)编程的新的内存模型一起,它们将共同为C++程序员们编写更加高效,更具备可移植性的并行计算程序提供强有力的支持。

  · C++0x提供了一个更高抽象层次的并行计算模型。这个并行计算模型基于异步地执行多个任务,而这些任务之间又是通过所谓的消息缓冲(message buffer)进行通信的。

  · 一个新的正则表达式标准库组件

  · 哈希容器

  · 移动语义以及移动语义在标准库中的应用。特别地,现在我们可以以传值的方式从函数返回一个体积比较大的对象。例如:

  vector make_vec(int n)

  {

  vector res;

  
for (int i=0; i

  res[i]
= rand_int(0,100000);

  
return res;

  }

  标准库中的vector有一个移动构造函数(move constructor),它可以接受一个右值并简单地直接将其转换为目标对象,而不是复制容器中的所有元素来完成对象的创建。这就表示函数的返回可以通过简单的少数几次赋值完成,而不再是通过更多的,比如一百万次,逐个复制元素来完成函数的返回。这样,我们无需再使用繁琐而危险的指针,引用,内存的申请和释放等。移动语义为我们传递大体积的对象提供了一个全新的完整的解决方案。特别地,它的实现也非常简单,并且使得对于数据的操作更加富有效率,比如两个矩阵的乘法操作:

  Matrix operator*(const Matrix&, const Matrix&);

  我可以一直继续下去,但是那将是一个长长的列表,但是这也将我们引向了更有趣的第二个问题:人们应该如何学习和使用C++0x中的这些新特性?我正在写第四版的《C++编程语言》(4th edition of The C++ Programming Language),但是那还有很多工作要做,那将会花费超过一年的时间。我想一定有其他的技术作者正在写或者正打算写关于C++0x的书,但是专家们或者C++的初学者想要找到比较好的书以及技术参考资料,恐怕还要等一段时间。(译注:我正在写一本全面覆盖C++0x新特性的C++参考书《我的第一本C++书》,即将由华中科技大学出版社出版,敬请期待)幸运的是,现在已经有一些关于C++0x的早期技术资料了,比如我的C++0x FAQ,它提供了很多简短的例子,以展示C++0x的核心特性,标准库的改建以及其它现在可以使用特性。但是,我们还需要更多的FAQ以及在线文档。我们还需要一些成系统地解释如何使用C++0x的新特性从而更好地支持C++的开发的资料。基于这样的考虑,我们需要的应该是一本书。

  当我在写程序的时候:使用C++的原则和实践经验,并假设我正在使用的编程语言是C++0x,但是,如果不使用C++0x的新特性那将是一件非常痛苦的事情。我可以十分肯定地预言,对于C++的培训者和学习者,C++0x将是上天的恩赐。C++0x对于对于一些好的编程技术和风格提供了大量的更有力的支持。比如,现在我们有一个普遍一致的初始化机制,现在我们都统一使用“{...}”操作符完成变量的初始化工作,并且不管我们在什么地方使用“{v}”初始化一个变量X,我们都会得到相同的结果。对于C++98中不一致的初始化形式,“=v”、“={v}”和“(v)”,这是一个非常大的改进。

  vector v = { 1,2,3,4}; // a user-defined type

  
double a[] = { 1,2,3,4}; // an aggregate

  
int f(const vector&);

  
int x = f({1,2,3,4});

  auto p
= new vector{1,2,3,4};

  
struct S { double a, b; };

  S s1{
1,2}; // has no constructor

  complex z {
1,2,}; // has constructor
0
相关文章