C++0x是ISO计划于2011年底完成的下一版C++语言标准。从2004年2月7日起陆续推出多个工作草案,当前最新的是2009年11月9日发布的N3000(http://www.open-std.org/ JTC1/SC22/ WG21/docs/papers/2009/n3000.pdf)。
新的C++标准将大幅改善C++内核语言领域,包括多线程支持、泛型编程、统一的初始化,以及表现的加强等。具体的改进有:增加右值引用(typename &&)、扩展常数表达式(引入新关键字constexpr)、放宽关于POD(Plain Old Data,简单旧数据)型结构的定义、引入外部模板概念(extern template class)、将初始化列表的概念绑定到类型上(std::initializer_list)、提供一种统一语法来初始化任意对象、可进行类型推导(auto)、支持以范围为基础的for循环、允许定义λ(lambda)函数、引进一种新的函数定义与声明的语法(template< typename LHS, typename RHS> [] AddingFunc(const LHS &lhs, const RHS &rhs) -> decltype(lhs+rhs) {return lhs + rhs;})、允许派生类手动继承基底类的构造函数(using 基类名::基类名;)、引入表示空指针常数的新关键字(nullptr)、引进一种特别的枚举类(enum class)、关键字explicit修饰符可用于显示类型转换、可用于模板类型的别名定义(template<…> using TypedefName = SomeType<…>;)、移除所有对 union 的使用限制(除了其成员仍然不能是引用类型)、加入(允许任意个数和任意类别的模板实参的)变长参数模板、增加两种新的字符类别char16_t(UTF-16)和char32_t(UTF-32)(传统的char类型对应于UTF-8)和新的字符串常量(u8"I'm a UTF-8 string."、u"This is a UTF-16 string."、U"This is a UTF-32 string.")、允许用户自定义新的常量修饰符(literal modifier)、引入支持多线程编程的多任务存储器模型和线程区域的存储期限(thread_local)、可使用或禁用对象的默认函数(default和delete)、(同C99)增加64位的整数类型(long long int)、增加用于测试的静态声明(assertion)、允许sizeof操作符作用在类的数据成员上(无须明确的对象)。
C++0x标准程序库将引进数个新功能,其中许多可以在现行标准下实现,而另外一些则依赖于(或多或少)新的C++0x内核语言机能。新的程序库的大部分被定义于于2005年发布发TR1(Library Technical Report,库技术报告),各式TR1的完全或部分实现目前提供在命名空间std::tr1,C++0x会将其移置于命名空间std之下。例如,增加了处理正则表达式(regular expression)的库(对应的头文件为<regex>)和可扩展的随机数功能。
新闻热点
疑难解答