Переход на C++11
Мы собираемся начать длительный проект с использованием C++ в качестве языка программирования.
Я читал, что C++0x выйдет в 2011 году, поэтому они назвали его C++11.
Когда выйдет C++ 11, мы все еще будем разрабатывать проект и хотели бы знать, возможно ли сейчас использовать какие-либо функции нового стандарта C++, чтобы иметь возможность:
- код быстрее, чем со старым C++ и
- легко переключаться при появлении нового стандарта?
6 ответов
Тот факт, что стандарт вышел, не означает, что компиляторы волшебным образом обновляются - большинству компиляторов потребовались годы, чтобы обеспечить разумную поддержку предыдущего стандарта, а некоторые функции так и не получили такой поддержки, как экспорт (исключено из C++0x), В зависимости от первых реализаций новых функций это тоже не очень хорошая стратегия - я предпочитаю позволить другим быть экспериментаторами, если я работаю до крайнего срока.
Кроме того, я бы не стал слишком быстро называть это C++11 - процесс разработки стандартов чреват возможностью задержек.
Изменить: я вижу, вы используете библиотеки RW. В этом случае, вероятно, многие функции нового Стандарта не будут представлять непосредственного интереса, так как они предназначены для авторов шаблонов и пользователей стандартной библиотеки 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.