Должен ли я использовать лямбды C ++ 11 сейчас? - PullRequest
7 голосов
/ 11 февраля 2011

Вот моя дилемма: мне очень нравится лямбда, и я очень часто использую Boost.Fusion и Phoenix. Они довольно зрелые и хорошо играют во многих компиляторах.

А как насчет лямбд на С ++ 11? Они действительно хороши и намного проще в использовании, чем улучшают альтернативы (больше никаких функторов!). Последние компиляторы ICC и GCC поддерживают их. Но все еще существует множество систем ICC 9.x и GCC 4.1 и ниже, не говоря уже о компиляторах XL и Sun. Эти компиляторы предлагают поддержку лямбды?

Я склонен думать, что, возможно, мне следует подождать, чтобы использовать возможности C ++ 11, чтобы старые системы не отклонили код. Как вы думаете? Подождите, пока старые компиляторы не исчезнут или просто сделаете это?

Ответы [ 4 ]

13 голосов
/ 11 февраля 2011

Нужно ли вам иметь возможность компилировать свой код, используя компилятор, который не поддерживает лямбды C ++ 11?

Если это так, то вы не можете их использовать (очевидно). В противном случае, на самом деле нет особых причин не использовать их.

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

Единственная важная функция, связанная с лямбда-выражением, о которой мне известно, что она не поддерживается последними версиями нескольких компиляторов, поддерживающих лямбда-выражения, - это та, которая была добавлена ​​в марте прошлого года и позволяет неявно преобразовывать лямбда-выражения в указатели функций. Visual C ++ 2010 и Intel C ++ 11.1 не поддерживают это (у меня нет более поздней версии Intel C ++ для тестирования, извините). Однако Visual C ++ 11 поддерживает неявное преобразование.

5 голосов
/ 11 февраля 2011

Вы нацелены на несколько компиляторов? Тогда нет. Если вы точно знаете, на какой компилятор (ы) вы нацеливаетесь, и они обрабатывают синтаксис одинаково, тогда используйте новые возможности!

3 голосов
/ 11 февраля 2011

Я думаю, что если вы работаете над библиотечным кодом, вам, вероятно, следует подождать.Я имею в виду, если вы хотите собрать библиотеку вместе либо для распространения с открытым исходным кодом, либо для использования в коммерческом кроссплатформенном пакете, то вы вряд ли сможете контролировать, какая поддержка лямбда-выражений будет доступна компилятору и как она будет себя вести.К счастью, лямбда-выражения, как бы они ни были хороши, в основном касаются синтаксического сахара.Они не предлагают больше функциональности, чем традиционные функторы, они просто делают его более приятным и более локализованным (конечно, я могу ошибаться, мои знания об использовании лямбд довольно невелики).Но, как правило, библиотека предназначена для того, чтобы скрыть уродство реализации.И если вам потребуется сделать эту библиотеку пригодной для использования на компиляторах, которые не поддерживают лямбда-выражения, вам все равно придется предоставить альтернативные переносимые реализации.Таким образом, если нет явных преимуществ в использовании лямбда-выражений в вашей библиотеке (либо в эффективности (время компиляции или выполнения), либо в пользовательском опыте (например, если вы используете лямбда-выражения, чтобы сделать вашу библиотеку более простой, понятной или интуитивно понятной)), это, вероятно, не стоит усилий.

Однако для пользовательского кода вы можете легче контролировать целевые платформы и / или компиляторы для своего программного обеспечения.В этом случае, если все компиляторы, которые вы ожидаете использовать, поддерживают lambdas ... тогда сходите с ума!

Теперь есть философский момент, стандарты для людей, которые должны им соответствовать.Это включает, конечно, людей, создающих компиляторы, но также и людей, использующих их.Когда люди начинают писать хорошие библиотеки и / или программное обеспечение, которое требует поддержки лямбды, люди, которые хотят их использовать, начнут жаловаться производителям компиляторов на добавление поддержки, которая, в свою очередь, будет мотивировать людей использовать лямбды ... и так же, как и мяч

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

1 голос
/ 11 февраля 2011

В вашем собственном коде, безусловно, пойти на это.На самом деле это отличная идея.

Для работы stackoverflow - это не то место, где нужно спрашивать.Если вы не принимаете решения на своем рабочем месте, и ваш компилятор знает, о чем вы говорите.В таком случае я призываю вас быть крутыми.

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