【问题标题】:How to solve warning for variable initialization C++如何解决变量初始化 C++ 的警告
【发布时间】:2020-01-29 13:07:15
【问题描述】:

编译 C++ 文件时收到以下警告:

variables.cpp:10:8: warning: extended initializer lists only available with -std=c++11 or -std=gnu++11
   int c{2} ;

这是文件:

#include <iostream>
#include <string>
#include <cstdlib>
using namespace std ;

int main()
{
  int a = 0 ;
  int b(1) ;
  int c{2} ;

  string myString = "I am a string !" ;

  cout << a+b+c << endl ;
  cout << myString << endl ;

  return EXIT_SUCCESS ;
}

这是命令行:

g++ -std=c++0x -Wall -Wextra -Winit-self -Wold-style-cast -Woverloaded-virtual -Wuninitialized -Wmissing-declarations -Winit-self -ansi -pedantic variables.cpp -o variables

我在 Ubuntu 18.04.1 上使用 g++ 7.4.0 我不想忽略警告,但要解决它, 谢谢

PS : 我试图将 -std=c++0x 更改为 -std=c++11 但它没有改变任何东西

【问题讨论】:

  • 你用的是什么版本的gcc?
  • "PS : 我尝试将 -std=c++0x 更改为 =std=c++11" -- 前面应该是 - std 中的 =std=c++11
  • 编译时使用-std=c++11

标签: c++ variables gcc-warning


【解决方案1】:
  1. 删除命令中的-ansi,相当于-std=c++98,并会覆盖你之前的标志-std=c++11。根据C-Dialect-Options

    在 C 模式下,这相当于 -std=c90。在C++模式下,相当于-std=c++98。

  2. -std=c++0x 替换为-std=c++11


请注意,如果您的编译器支持它,建议使用最新的 c++ 标准 -std=c++17。使用较新的 c++ 标准通常会使您的代码更短、更易读且性能更高。

【讨论】:

  • 再澄清一点:如果选项冲突,则适用最右边的选项。
  • 我认为在这个问题/答案中值得一提的是,c++17 是 gcc 中最新的官方标准版本(后来是草稿),所以除非他们有特定的理由在 c ++11(或更早版本),推荐的标志是-std=c++17。请参阅此处了解更多信息:gcc.gnu.org/projects/cxx-status.html#cxx17
  • @KevinAnderson 不是每个人都安装了最新的 gcc。例如,许多人仍在使用 ubuntu 16.04,其中“默认”gcc 不支持-std=c++17
  • @KevinAnderson 我听从了你的建议,因为我在 Ubuntu 18.04 上,所以我可以使用最新版本
  • @ZhengQu 你当然是对的,如果他们没有 17 他们就不能使用它(直到最近我也被限制为 11 由于“原因”),但我感谢你编辑你的答案是最新的作为“默认”选项。
【解决方案2】:

编译命令行有两个问题:

第一个是编译命令中的-ansi,它隐式地将标准设置为c++98。在您的情况下,-ansi 选项会与-std=c++11 产生冲突。

第二个是-std=c++0x,你必须用-std=c++11替换它。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2015-08-08
    • 2021-12-06
    • 2017-11-24
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多