关于C++ -0x语言标准的更新

Hello:控制C++语言的标准体( SC22/WG21号机组 正处于修订C++语言的过程中——这一新的C++语言修订版,目前被称为C++0X,应该在十年结束时完成并予以批准。作为这个委员会最近会议(英国牛津附近)的一部分,在C++的-0X标准中,在当前的工作文件中添加了一些新的语言特征。

null

C++中的新字符类型

这将添加关键字char16u t和char32u t以及u“…”和u“…”以及u“”和u“”文本。这些新的语言特性一起为用户提供了一种编码16位(即UTF-16)字符串文字/字符常量和32位(即UTF-32)字符串文字/字符常量的方法。该方案还包括一些库功能。

模板别名

这个特性已经出现了一段时间,最终被批准加入C++标准中。它允许以下代码:

#包括

模板 类MyAllocator{ };

模板 使用MyVector=std::vector>;

MyVectorvec;

注意:在你的眼睛中,有可能注意到,上面例子中嵌套的模板参数列表以“>”而不是“>”结尾,这是因为对C++ -0x标准的第一个改变是,在关闭多个模板参数时,不需要在嵌套的“>”终止符之间插入空白。列表。

修改序列点

这不应该改变C++语言中的任何东西,它只是提供了更清晰的措辞——它去掉了“序列点”一词,而是描述了一个在操作B之前被排序的操作A(即,在执行每个表达式或语句之前,对函数调用的参数的估计进行排序)。函数体)或被取消排序(即,对函数调用的不同参数的求值是彼此取消排序的)。

希望本文能为未来C++内存模型的工作打下基础,尤其是并发方面。在即将召开的会议上,委员会应审查关于记忆模型和并发性的文件和提议的措辞。

可变模板

这是这次新增的最大功能。它允许以下代码:

模板

第十类:公共混合{

公众:

X(const Mixins&…Mixins):混合(Mixins)…

{

}

};

如果你在这门课上专门说:

A类{};

B类{};

C类{};

XX;

然后编译器将生成以下专门化:

X类:公共A、公共B、公共C{ 公众: X(A常数&u A,B常数&u B,C常数&u C):A(&u A),B(&u B),C(&u C)

{

}

};

这个特性对像tuple这样的类模板有很大的影响,根据Doug Gregor的说法,它可以极大地提高编译器的时间性能——因为编译器现在只需要处理一个类模板而不是N(我认为tuple的N通常是20)。此功能的一个无意的副作用是,它使以下内容格式良好:

结构X{ 空隙f(类型……);

};

是的,一排是六个。

随着这一特点得到批准,图书馆工作组继续进行工作,并更新了工作文件的图书馆部分,以适当利用可变模板。

允许sizeof应用于非静态数据成员

目前C++标准不允许如下:

结构{

内景m; };

尺寸(S::m)

这一特点使这样的代码合法化。

广义常数表达式

这项功能几乎被批准,但在最后一分钟核心决定撤回它。广义常量表达式如下所示:

constexpr int平方(int x)

{ 返回x*x;

}

在表达式的结果不是严格意义上的常量表达式的情况下(如位掩码),此功能确实很有帮助,例如。它包括一个演员;或者对于需要函数调用的情况,从而将静态初始化变成动态初始化(注意:我怀疑VisualC++将当前将这些动态初始化转换为静态初始化)。

出现的问题是,由于这些是常量表达式,它们作为非类型模板参数是有效的,但由于它们也是函数,因此在模板参数推导过程中可能需要编译器执行重载解析。这与 核心问题–339 它处理sizeof表达式中的函数调用。我们决定,Core将推迟批准广义常数表达式,直到这个问题得到解决——我们希望在下次会议上这样做。

SC22/WG21的下一次会议将于7月在多伦多举行。在这次会议上,希望委员会开始批准C++语言的一些较大的变化:这包括概念和内存模型/并发建议等特征。希望在多伦多会议之后,我能向大家介绍C++委员会的进一步进展。

乔纳森 洞穴

© 版权声明
THE END
喜欢就支持一下吧
点赞0 分享