Кстати, возможно это связано с багом в MSVC2010(точнее в стандарте того времени), когда в выражении участвует lvalue(а выражение s есть lvalue), то студия некорректно пытается использовать привязку к lvalue ссылкам даже в том случае, когда результирующее выражение есть rvalue.
К примеру:
foo(std::string&& str);//#1
foo(const std::string& str);//#2
И вызов:
foo(«Hello world!»);
MSVC2010 — #2
MSVS2011 — #1
Можете почитать мою статью по rvalue ссылкам, там все случаи рассмотрены, как мне показалось :)
vScherba, т.е. сначала Вы говорите, что Вам интересно, что написано в стандарте. Потом Вы мне тыкаете кодом из студии, пытаясь опровергнуть мои слова. Хотя Вами написанное ни на йоту не противоречит тому, что написано у меня. NRVO превалирует над семантикой перемещения, т.к. является прямым созданием. Без NRVO эти строки всегда дадут одинаковый результат. Оптимизаторы могут код выполнять в другом порядке про это тоже хотите поговорить? А ведь это тоже, не совсем то, что человек ожидает. Хотя семантика исполнения программы от этого не меняется. Суть семантики перемещения есть ликвидация лишнего копирования, NRVO/RVO делает тоже самое, только еще быстрее. Написание std::move в return операторе есть избыточное действие.
О чём тут можно спорить, когда я Вам привел параграфы стандарта? Идите со стандартизаторами спорьте.
Я немного ошибся, не xvalue, а prvalue.
Согласно пунктам 3.10/1, 6.6.3/2. 12.2/1 выражение return s; является prvalue, а выражение return std::move(s); — xvalue. Принимая во внимание, тот факт, что по таксономии типов выражений rvalue включает в себя xvalue и prvalue, а также то, что rvalue имеют жёсткую привязку к rvalue ссылкам мы имеем следующее: результат выражений return std::move(s); и return s; всегда повлечёт за собой вызов move ctor, за исключением случае оптимизации или остутствия оного у возвращаемого типа.
Это поведение стандартно и от компилятора не зависит.
Не очень умное заявление, учитывая то, что у всех трех реализован разный набор функционала. И сказать, что в каком-то из них реализовано больше новшеств — нельзя.
Касательно жертвенности в обратной совместимости: если кто-то решал использовать локальные переменные после вызова return, то он сам себе «хвостатый буратин». Пишешь костыли — проверяй кода в каждом компиляторе. А для нормального кода нет никаких последствий, по крайней мере в этот части.
эти строки полностью эквивалентны, что с вызовом move, что без оного. s есть xvalue, а значит будет перемещена. Стандарт не может запрещать и разрешать одну и туже фичу одновременно :)
Вопрос к знатокам политики adobe: в прошлом году, по осени, была акция с удешивлением различных пакетов софта от adobe, часто ли проходят такие акции и где можно подписаться на новость о таких акциях?
Конечно популярнее, ведь это приятно когда тебе дают готовый алгоритм, который ты можешь использовать без понимания. То, что описано в статье дает фундаментальные знания, как я понял. А это гораздо важнее всех паттернов, т.к. паттерн это всего лишь формализация идеи, которую многие слепо используют. А потом начинается спор о том кто круче может паттерн «мост» релизовать, и кто правильнее его понимает. Забывая то, что никакого эталона не существует и любые формализации паттернов есть лишь воплощение идей конкретных авторов и ваше видение может отличаться. Это как с кодом: можно копирастить с SO, а можно самому придумывать алгоритмы.
Win+W поиск по настройкам. Win+F поиск по файлам. По умолчанию поиск по приложениям
Если владеете английским языком, то советую прочесть. Там вполне доходчиво объяснены причины перемен в поиске и, лично я, доволен усилиями проделанными Майкрософт в поисковом сегменте Windows
При чем тут вопрос страховки и стоимости лечения. Я про качество медицины говорю, про квалификацию работников (качество их работы), про их зарплату.
Как это причем? Зарплаты медперсонала прямо пропорциональны стоимости лечения. И да, кстати, не надо принижать квалификацию наших медиков. Да, у многих из них нет того оборудования, что есть у их западных коллег, но от этого они хуже не становятся.
Суть: выше з/п учителя/преподавателя/медика → бОльшая конкуренция на это места → более высокое качество на выходе
Если бы все было бы так просто, то, к примеру, в среде программистов не было бы быдлокодеров. По крайней мере там, где хорошо платят. А это не так. Величина зарплаты не часто отражает уровень. А я лично знаю отличных специалистов, которые не гонятся за длинным рублем.
Если бы распилы платили бы гос. работникам, все было б иначе.
Распили плохо, безусловно, но не надо на этом спекулировать. Чтобы делать подобные выводы необходимы конкретные цифры.
Если я не ошибаюсь, то в США отсутствие медицинской страховки равноценно отсутствию медицины и поэтому для людей очень страшно потерять её. У нас подобных ужасов нет, т.к. медицина не настолько дорога. Но это спекуляции, т.к. я не очень сведущ в медицинских вопросах.
А связь мотивации с денежным благосостоянием есть вопрос очень спорный, т.к. даже в упомянутых Вами штатах сомневаются в этом. И не зря, т.к. деньги являются достаточным мотиватором в очень редких случаях.
И, кстати, у нас нельзя платить так как в США, потомучто у нас нет печатной машинки, которая может печатать деньги без остановки.
Ну и наконец: как это все соотносится с раздачей денег населению? Герой топика ведь просто раздал деньги, а не вложил их(пусть бы даже несколько повысив зарплату). Переложив этот пример на государственное устройство мы бы получили раздачу денег населению. Я думаю Вы прекрасно понимаете, к чему бы это привело…
К примеру:
foo(std::string&& str);//#1
foo(const std::string& str);//#2
И вызов:
foo(«Hello world!»);
MSVC2010 — #2
MSVS2011 — #1
Можете почитать мою статью по rvalue ссылкам, там все случаи рассмотрены, как мне показалось :)
О чём тут можно спорить, когда я Вам привел параграфы стандарта? Идите со стандартизаторами спорьте.
Согласно пунктам 3.10/1, 6.6.3/2. 12.2/1 выражение return s; является prvalue, а выражение return std::move(s); — xvalue. Принимая во внимание, тот факт, что по таксономии типов выражений rvalue включает в себя xvalue и prvalue, а также то, что rvalue имеют жёсткую привязку к rvalue ссылкам мы имеем следующее: результат выражений return std::move(s); и return s; всегда повлечёт за собой вызов move ctor, за исключением случае оптимизации или остутствия оного у возвращаемого типа.
Это поведение стандартно и от компилятора не зависит.
Если владеете английским языком, то советую прочесть. Там вполне доходчиво объяснены причины перемен в поиске и, лично я, доволен усилиями проделанными Майкрософт в поисковом сегменте Windows
Как это причем? Зарплаты медперсонала прямо пропорциональны стоимости лечения. И да, кстати, не надо принижать квалификацию наших медиков. Да, у многих из них нет того оборудования, что есть у их западных коллег, но от этого они хуже не становятся.
Если бы все было бы так просто, то, к примеру, в среде программистов не было бы быдлокодеров. По крайней мере там, где хорошо платят. А это не так. Величина зарплаты не часто отражает уровень. А я лично знаю отличных специалистов, которые не гонятся за длинным рублем.
Распили плохо, безусловно, но не надо на этом спекулировать. Чтобы делать подобные выводы необходимы конкретные цифры.
А связь мотивации с денежным благосостоянием есть вопрос очень спорный, т.к. даже в упомянутых Вами штатах сомневаются в этом. И не зря, т.к. деньги являются достаточным мотиватором в очень редких случаях.
И, кстати, у нас нельзя платить так как в США, потомучто у нас нет печатной машинки, которая может печатать деньги без остановки.
Ну и наконец: как это все соотносится с раздачей денег населению? Герой топика ведь просто раздал деньги, а не вложил их(пусть бы даже несколько повысив зарплату). Переложив этот пример на государственное устройство мы бы получили раздачу денег населению. Я думаю Вы прекрасно понимаете, к чему бы это привело…