LINUX.ORG.RU

C++ std::move

 ,


0

3

Такой глупый вопрос. Есть небольшой код:

std::string s1 = "s1";
std::string s2 = "s2";
s2 = std::move(s1);

Почему move работает как swap? То есть в конце значения такие: s2=«s1», s1=«s2». Я ожидал, что будут: s2=«s1», s1="". Использую gcc 4.9.


Ответ на: комментарий от anonymous

Потому что это невозможно строго определить везде

Ты про ситуации типа такой?

int i;
if (rand())
  i = 42;
cout << i;
Ну это говно, а не код в любом случае.

legolegs ★★★★★
()
Ответ на: комментарий от legolegs

Я такие ворнинги ловил в конечном автомате, причем реально ошибки там не было. Афаик, code flow статично не анализируется в достаточной мере.

anonymous
()
Ответ на: комментарий от anonymous

Во-первых, если не умеешь писать микробенчмарки — не пиши их. Помимо at() и [] твой «бенчмарк» замеряет множество других вещей. Во-вторых, даже несмотря на это, он замедлился в 1.5 раза, то есть даже при неправильном измерении прибором с огромной погрешностью разница очевидна.

Softwayer ★★
()
Ответ на: О, плюсосрач от anonymous

В примере оп-поста самое разумное - считать s1 неинициализированной и не компилировать код, который её читает.

Окей, можно захардкодить такое поведение для ряда библиотечных классов, а что делать с пользовательскими, которые могут предоставлять дополнительные гарантии?

Softwayer ★★
()
Ответ на: комментарий от Softwayer

Во-первых, если не умеешь писать микробенчмарки — не пиши их.

Во-первых, если ты умеешь, то предоставь правильные «микробенчмарки» и продемонстрируй разницу «в разы» :-)

Помимо at() и [] твой «бенчмарк» замеряет множество других вещей.

Это не важно :-) Это называется «при прочих равных условиях», если ты в курсе что это такое, конечно :-)

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

Очевидно, что с тобой всё ясно :-)

anonymous
()
Ответ на: комментарий от anonymous

Это не важно :-) Это называется «при прочих равных условиях», если ты в курсе что это такое, конечно :-)

Нет, это важно. Речь шла о производительности методов, а не какого-то кода, написанного мамкиным бенчмаркером.

Очевидно, что с тобой всё ясно :-)

Ясно.

Softwayer ★★
()
Ответ на: комментарий от Softwayer

Нет, это важно. Речь шла о производительности методов, а не какого-то кода, написанного мамкиным бенчмаркером.

Ты ведь решил показаться знающим специалистом и заявил о разнице «в разы» :-) Тебе было показано, что «производительность методов» с проверкой и без проверки при прочих равных условиях разнится в 1,5 раза :-) То, что в методичке по экзаменационным тестам на этот счёт ничего не сказано - это не мои проблемы :-) А вот то, что ты не подкрепил свои громогласные заявления про разницу «в разы» никакими бенчмарками - это называется фейл :-)

anonymous
()
Ответ на: комментарий от former_anonymous

В жабе такого нет, и почему-то она по скорости обработки данных к С++ близка вплотную

Ну да. Я было повелся на такие речи и попробовал распиаренный CLion. Теперь презрительно смотрю на «одептов церкви жабы быстрой, как C++».

kawaii_neko ★★★★
()
Ответ на: комментарий от kawaii_neko

Не одепт, но во-первых жаба требует разогрева, во-вторых найди и сравни по скорости аналог CLion на плюсах.

anonymous
()
Ответ на: комментарий от anonymous

найди и сравни по скорости аналог CLion на плюсах.

KDevelop/qtcreator чем уважаемому любителю жабо-проприетари не угодили?

anonymous
()
Ответ на: комментарий от anonymous

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

Softwayer ★★
()
Ответ на: комментарий от Softwayer

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

Если за период с момента после сдачи ЕГЭ тебя обучили лишь выдавливать из себя последовательность точек вместо элементарной аргументации, то это печально :-) Фэйл как он есть :-)

anonymous
()
Ответ на: комментарий от peregrine

Просто разработчик на C++ должен уметь сказать что делает каждая функция в его коде. Если он этого не умеет, то он не разработчик на C++.

Получается, разработчиков на C++ не существует? Только говнокодеры?

hateyoufeel ★★★★★
()
Ответ на: комментарий от hateyoufeel

ога. нет тебя ;)

captcha: blvd, real del valle

anonymous
()
Вы не можете добавлять комментарии в эту тему. Тема перемещена в архив.