GCC二进制字面值与c++ 14二进制字面值的区别
Difference between GCC binary literals and C++14 ones?
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++的下一个标准所接受的一个特性。
相关文章:
- 如何在编程语言中表示二进制字段
- VB6和c++布尔字面值
- 为什么添加两个字符串字面值不使用操作符+
- 在编译时定义字符串/char字面值
- c++的字符串字面值如何存储在内存中?
- 为什么可以向字符串字面值添加整数?
- 用户定义字面值如何与数字分隔符一起使用
- 可修改字符串字面值的用例
- c++ constexpr vs宏,字符串字面值vs整数
- 字符串对字符串字面值的优化不够
- 是否有可能合法地重载字符串字面值和const char*
- UnicodeString /字符串字面值vs十六进制值
- 为什么将指针的内容修改为字符串字面值是错误的?
- 可变char模板的用户定义字面值
- c++: Std::cout缓冲区错误?对字符串变量和字符串字面值使用std::cout导致输出混乱
- 不能定义用户定义的字面值
- C/ c++预处理器中的宏参数字符串化为宽字符串字面值
- 如何在c++中编写八进制浮点字面值
- 是否有可能获得包含字面值的字符串的长度
- GCC二进制字面值与c++ 14二进制字面值的区别