【问题标题】:C++ Binary LiteralC++ 二进制字面量
【发布时间】:2022-01-25 06:44:03
【问题描述】:

我知道 C++ 中的 Binary Literal 是从 C++14 标准化的。

但是,虽然我将std 修复为c++11,但它运行良好。因为实际上,我预计会出错。以下是我预期会出错的代码。

int main(){
  int a = 0b1010; // an error is expected
  std::cout << a << std::endl;
}

另外,我已经使用以下命令编译并执行了上述文件。

g++ -std=c++11 -Wall main.cpp -o runfile
./runfile

没有出现预期结果的原因是什么?是不是我做错了什么?

【问题讨论】:

  • 为什么您会期望该代码出错?具体是哪一个?
  • 因为二进制文字在 C++14 之前没有标准化。所以,我认为在 C++11 中使用 g++ 会出错。
  • 作为 GNU GCC 一部分的 C++ 编译器(即g++)对 C++ 有很多扩展。其中一些创新扩展已被 C++ 标准本身采用。大多数编译器都提供扩展(通常是为了促进与平台及其 API 的互操作),因此具有扩展(包括后来的 C++ 标准的复古特性)并不是 GNU GCC 独有的。

标签: c++ binary c++14


【解决方案1】:

早在 C++14 对二进制文字进行标准化之前,二进制文字就已成为 GCC 中的编译器扩展。您可以使用-pedantic 编译以警告扩展,使用-pedantic-errors 将这些特定警告提升为错误:

<source>:3:11: error: binary constants are a C++14 feature or GCC extension
    3 |   int a = 0b1010; // an error is expected
      |           ^~~~~~

【讨论】:

  • 感谢您的解决方案。它是 GCC 的一个扩展。它帮助了我!
猜你喜欢
  • 2010-10-10
  • 2010-10-16
  • 1970-01-01
  • 2010-10-06
  • 2020-01-10
  • 2010-11-17
  • 1970-01-01
  • 1970-01-01
  • 2015-05-26
相关资源
最近更新 更多