Я пытаюсь обновить мой компилятор C ++ до C ++ 11. Я немного искал и пришел к выводу, что мне нужно использовать флаг -std=c++0x
или -std=gnu++0x
, но я мало что знаю о флагах. Может кто-нибудь мне помочь? (Я использую Ubuntu 12.04.)
Вот ошибка, которую я получаю от компилятора, когда я пытаюсь использовать библиотеку, которая включена в C ++ 11 (то есть массив):
#include <array>
#include <iostream>
int main()
{
std::array<int, 3> arr = {2, 3, 5};
...
}
Этот файл требует поддержки компилятора и библиотеки для следующего стандарта ISO C ++, C ++ 0x. Эта поддержка в настоящее время является экспериментальной и должна быть включена с помощью параметров компилятора -std = c ++ 0x или -std = gnu ++ 0x.
-std=c++11
вместо этого. Может быть, и то и другое разрешено.g++-4.6
по умолчанию (который поддерживает только-std=c++0x
)g++
, напримерg++ -std=c++0x _filename_ && ./a.out
.Ответы:
Флаги (или параметры компилятора) - это не что иное, как обычные аргументы командной строки, передаваемые в исполняемый файл компилятора.
Предполагая, что вы вызываете g ++ из командной строки (терминала):
$ g++ -std=c++11 your_file.cpp -o your_program
или
$ g++ -std=c++0x your_file.cpp -o your_program
если вышеупомянутое не работает.
источник
-Wall -g
сразу послеg++
-Werror
тоже добавил , без причины не при запуске проекта.Вы можете проверить свой
g++
по команде:это скажет вам, на какой компилятор в данный момент он указывает.
Чтобы переключиться на
g++
4.7 (при условии, что вы установили его на своем компьютере), запустите:Затем выберите в
2
качестве выбора (Моя машина уже указывает наg++
4.7, поэтому *)После того, как вы переключите компилятор, снова запустите,
g++ --version
чтобы убедиться, что переключение произошло правильно.Теперь скомпилируйте вашу программу с
источник
Ваша Ubuntu определенно имеет достаточно свежую версию g ++. Флаг для использования есть
-std=c++0x
.источник
I'm using Ubuntu 12.04.
в вопросе.Если вы хотите сохранить расширения компилятора GNU, используйте -std = gnu ++ 0x вместо -std = c ++ 0x. Вот цитата из справочной страницы:
источник
?:
оператора? Единственное другое расширение, которое приходит на ум, структурные выражения, заменяется инициализацией списка C ++ 11. В любом случае, эта цитата в основном относится к C, а не к C ++.Вы можете обратиться к следующей ссылке, для которой функции поддерживаются в конкретной версии компилятора. Он имеет исчерпывающий список поддержки функций в компиляторе. Похоже, GCC внимательно следит за стандартом и реализует перед любым другим компилятором.
Что касается вашего вопроса, вы можете скомпилировать с помощью
g++ -std=c++11
для C ++ 11g++ -std=c++14
для C ++ 14g++ -std=c++17
для C ++ 17g++ -std=c++2a
для C ++ 20, хотя все функции C ++ 20 еще не поддерживаются, обратитесь к этой ссылке для получения списка поддержки функций в GCC.Список меняется довольно быстро, следите за списком, если вы ожидаете поддержки определенной функции.
источник