GCC二进制字面值与c++ 14二进制字面值的区别

Difference between GCC binary literals and C++14 ones?

本文关键字:二进制 字面值 区别 GCC c++      更新时间:2023-10-16

c++ 14似乎即将到来,编译器已经在尝试实现这个新版本的核心特性。我正在研究GCC对这些核心特性的支持,并注意到二进制文字部分的一些问题:GCC实现了它们,但似乎在GNU二进制文字和c++ 14二进制文字之间有所不同。以下是它们各自的引用:

  • GNU二进制文字
  • c++ 1y二进制文字

我试图找到它们之间的一些差异,因为GCC似乎有所不同,但找不到任何东西。你们中有人知道更多可能的不兼容吗?

与gcc 4.9中引入支持的commit diff相比,唯一的区别是gcc现在接受二进制文字作为c++ 1y的语言特性,并且如果指定了c++ 1y支持,则不会警告它们是gcc扩展。实际实现没有变化。

以前:

warning : binary constants are a GCC extension

现在,除非指定了-std=c++1y:

warning : binary constants are a C..1y feature or GCC extension

我猜区别在于,因为一个是扩展,那么人们不会太倾向于使用它,而另一个是标准兼容的,无需打开扩展即可访问。这是一种形式。

您指向的第一个文档是二进制文字的GNU实现,作为C语言的扩展(即,它是C语言的一个非标准特性,该文档定义了gcc如何实现该语言的扩展)。

你所指的第二个文档是一个将二进制文字添加到c++ 11语言的建议,但据我所知,它也没有被接受(*),这意味着它也不是标准c++的一部分,它仍然是由gcc提供的语言扩展。

在我看来,这个特性在编译器之间是不可移植的,但是你可以在c++ 11中使用用户定义的文字来定义你自己的二进制文字实现。

(*) s/not accepted/我在N3485 "Working Draft, Standard for Programming Language c++ "中找不到任何关于二进制文字的参考,但它可能是c++的下一个标准所接受的一个特性。