Переход на C++11

Мы собираемся начать длительный проект с использованием C++ в качестве языка программирования.

Я читал, что C++0x выйдет в 2011 году, поэтому они назвали его C++11.

Когда выйдет C++ 11, мы все еще будем разрабатывать проект и хотели бы знать, возможно ли сейчас использовать какие-либо функции нового стандарта C++, чтобы иметь возможность:

  • код быстрее, чем со старым C++ и
  • легко переключаться при появлении нового стандарта?

6 ответов

Решение

Тот факт, что стандарт вышел, не означает, что компиляторы волшебным образом обновляются - большинству компиляторов потребовались годы, чтобы обеспечить разумную поддержку предыдущего стандарта, а некоторые функции так и не получили такой поддержки, как экспорт (исключено из C++0x), В зависимости от первых реализаций новых функций это тоже не очень хорошая стратегия - я предпочитаю позволить другим быть экспериментаторами, если я работаю до крайнего срока.

Кроме того, я бы не стал слишком быстро называть это C++11 - процесс разработки стандартов чреват возможностью задержек.

Изменить: я вижу, вы используете библиотеки RW. В этом случае, вероятно, многие функции нового Стандарта не будут представлять непосредственного интереса, так как они предназначены для авторов шаблонов и пользователей стандартной библиотеки C++.

На этой странице показаны части C++ 0x, поддерживаемые gcc(основным компилятором Unix), MSVC(основным компилятором Microsoft) и некоторыми другими (включая Intel). Дополнительная информация о Clang здесь, хотя я думаю, что их поддержка C++ для текущих стандартов все еще неполна.

Visual C++ 2010 и последние версии gcc (-std= C++0x) поддерживают новые функции C++11, но не все из них. В частности, вы можете начать использовать новый синтаксис инициализатора с фигурными скобками; это IMHO самое большое изменение синтаксиса в C++11. Это также изменение, которое добавит больше несоответствий в ваш код, если одна часть использует стиль C++98, а другая - стиль C++11.

Скотт Мейерс (автор серии "Effective C++") загрузил на прошлой неделе следующее:

Краткая информация о доступности C++ 0x в gcc и MSVC

В некотором смысле это похоже на другую ссылку, упомянутую в другом ответе в этой теме. Главное отличие в том, что ссылка Мейерса содержит только то, что он сам испробовал. Я ожидаю, что он будет обновляться в ближайшие месяцы.

Кроме того, и вот как я узнал об этом, он подразумевал в comp.std.C++, что он работает над чем-то связанным с учебным материалом C++ 0x (очевидно, за пределами его учебного курса), но это слишком спекулятивно сейчас, так что давайте просто придерживаться первой ссылки, которую я предоставил выше.

Не думайте, что вы переключаетесь на все новые функции одновременно. Оцените каждую новую языковую функцию с учетом ее достоинств и качества ее реализации.

Например long long был довольно распространенным расширением компилятора еще до того, как он был рассмотрен для C++0x, и новый auto синтаксис полезен и, вероятно, будет хорошо поддерживаться. Вы можете быть очень осторожны с некоторой сложной комбинацией нескольких новых функций, таких как вывод типа с decltype для функции с новым -> синтаксис внутри класса с использованием шаблонов переменных и новые правила синтаксического анализа >>,

Это зависит от того, какой компилятор вы используете.

Например, GCC имеет расширение tr1, которое содержит некоторые функции, которые будут в C++11.

Другие вопросы по тегам