В чем разница между -std = С++ 0x и -std = С++ 11

Я знаю, что эти флаги предназначены для С++ 11 в Eclipse.

Но я не знаю, в чем разница и какой из них более предпочтительный.

Кажется, что они оба работают с С++ 11 обычно.

Ответ 1

Вы должны предпочесть -std=c++11.

(Примечание: я предполагаю, что -std=c++11x является опечаткой в ​​вашем вопросе)

Старый -std=c++0x нужен только для старых версий компилятора, которые не поддерживают -std=c++11, и они выбрали это имя, чтобы выразить предварительный и неустойчивый характер функций (и ABI) предстоящего C++11 (и когда еще не было ясно, станет ли это в конечном итоге C++10 или C++12). Они меняют некоторые детали, адаптируясь к изменяющимся рабочим чертежам стандарта в то время, прежде чем официально был выпущен стандарт С++ 11.

Если ваш компилятор поддерживает -std=c++11, нет смысла использовать -std=c++0x. Что касается совместимости: могут быть даже различия и несовместимости, но они не просто связаны с использованием -std=c++0x, а с конкретными версиями компилятора. Когда компилятор поддерживает оба варианта, они должны быть идентичными.

Ответ 2

Стандарты С++ и C обычно называются в течение года, в котором они публикуются, что облегчает запоминание.

Например, в С++ исходный Стандарт был опубликован в 1998 году, поэтому мы говорим о С++ 98, и когда мы ссылаемся на его первую коррекцию, опубликованную в 2003 году, мы говорим о С++ 03.

Предполагалось, что следующий Стандарт после этого будет выполнен в 2008 году, но поскольку он был неопределенным, он был назван С++ 0x, где x означал либо 8, либо 9. На практике, хотя, как мы все знаем, планирование смещено, и поэтому мы заканчиваем С++ 11.

Тем не менее, для следующей версии (С++ 1x) Бьярне Страуструп заявил о своем намерении сделать это через 5 лет (примерно 2016 год). На данный момент есть изменения, внесенные в основной язык (концепции, модули и сбор мусора), и, похоже, основное внимание уделяется расширению библиотеки (например, файловой системы), но это еще рано, так что кто знает!