Как решить предупреждение для инициализации переменной C ++ - PullRequest
4 голосов
/ 29 января 2020

При компиляции файла 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

Я использую g ++ 7.4.0 в Ubuntu 18.04.1 Я не хочу игнорировать предупреждение, но чтобы решить его, спасибо

PS: я пытался изменить -std = c ++ 0x на -std = c ++ 11, но это ничего не изменило

Ответы [ 2 ]

10 голосов
/ 29 января 2020
  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 ++ обычно делает ваш код короче, более читабельным и более производительным.

0 голосов
/ 29 января 2020

У вас есть 2 проблемы в командной строке компиляции:

Первая - это команда -ansi в компиляции, которая неявно устанавливает стандарт для c ++ 98. В вашем случае опция -ansi создает конфликт с -std=c++11.

Второй - -std=c++0x, вы должны заменить его на -std=c++11.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...