C++14 似乎即将到来,编译器已经在尝试实现这个新版本的核心特性。我正在查看GCC 对这些核心功能的支持,并注意到有关二进制文字部分的一些信息:GCC 实现了它们,但似乎在 GNU 二进制文字和 C++14 二进制文字之间有所不同。以下是两者的各自参考:
我试图找到它们两者之间的一些差异,因为 GCC 似乎有所作为,但找不到任何东西。你们中的任何人都知道更多关于可能的不兼容性吗?
C++14 似乎即将到来,编译器已经在尝试实现这个新版本的核心特性。我正在查看GCC 对这些核心功能的支持,并注意到有关二进制文字部分的一些信息:GCC 实现了它们,但似乎在 GNU 二进制文字和 C++14 二进制文字之间有所不同。以下是两者的各自参考:
我试图找到它们两者之间的一些差异,因为 GCC 似乎有所作为,但找不到任何东西。你们中的任何人都知道更多关于可能的不兼容性吗?
从在 gcc 4.9 中引入支持的提交差异来看,唯一的区别是 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/不接受/我在 N3485“工作草案,C++ 编程语言标准”中找不到对二进制文字的任何引用,但它可能是下一个 C++ 标准接受的功能。