«В валидном но неопределенном состоянии». Так лучше?
Нет, выкинь пропаганду. Состояние не просто валидное - оно определённое. Определяется реализацией. Точно так же как и всё остальное.
С т.з. raii ресурс будет потерян. Но раишные объекты не могут существовать без ресурса, потому ресурс там будет, но будет пустой. Если базовая семантика нарушается - это проблема реализации. Тоже самое может быть где угодно, поэтому мы исходит из того, что семантика не нарушается.
История с состоянием, мусором и прочим - это нелепая раст и прочая бездарная пропаганда.
Естественно, но не цпп стандартом ведь, об этом речь. Может некий мой библиотечный raii класс Data c хенделами внутри, весь его ливер - на моё усторение, поэтому «неопределенное».
Естественно, но не цпп стандартом ведь, об этом речь.
Чушь нелепая.
Может некий мой библиотечный raii класс Data c хенделами внутри, весь его ливер - на моё усторение, поэтому «неопределенное».
Ещё большая чушь нелепая. Я сказа сказал, что не жри пропаганду. Но ты продолжаешь.
Твои заходы нелепы и не состоятельны. Любая логика, которая может быть переопределена - может быть переопределена как угодно. Везде. Таким образом любое копирование любых объектов - не определено, потому как оно может делать что угодно.
Поэтому, объект всегда валиден и всегда определён. По определению. Если это не так - твоя реализация не соблюдает семантику raii и семантику операции.
Если твоя реализация не соблюдает семантику raii/операции - она может не соблюдать её для чего угодно, но об этом не говорил. Да и не скажешь, потому что сделаешь неопределённым всё.
Поэтому и методичку выкинь. И не потребляй больше пропаганды этой нелепой.
Ну это уже занудство какое-то. У буржуев состояние объекта правильно называется «unspecified but valid», хз как правильно перевести unspecified, перевёл «неопределённое». Думал, что здесь люди понимают, но не все …
У буржуев состояние объекта правильно называется «unspecified but valid»
Это полная и нелепая чушь. Это пишут бездарные идиоты, которые нажрались пропаганды. В реальности ничего этого не существует, от того ты и поплыл с первого же ответа.
хз как правильно перевести unspecified, перевёл «неопределённое». Думал, что здесь люди понимают, но не все …
Не в этом проблема. Неважно как это переводится - это чушь. Поведение специфицировано не меньше, чем любое другое.
То, где ты это читал, повторюсь - то писали либо само раст-отребье, либо отребье нажравшиеся пропаганды. И то и другое отребье - ничего не знают и никакого отношение их гнилой кукаретинг к реальности не имеет.
К тому же язык специфицирует только базовое поведение. И вот в рамках него поведение определено. Потому что это копирование, что там, что там. Точно так же поведение даже на уровне идиом определено. Везде.
Это общепринятые цпп термины, которые способствуют взаимопониманию. А ты чего-то там себе нафантазировал, только это не цпп. ЦПП стандарт:
[string.cons]
basic_string(const basic_string& str);
basic_string(basic_string&& str) noexcept;
Effects:Constructs an object of classbasic_stringas indicated in Table 56. In the second form,stris left in a valid state with an unspecified value.
http://ikit.sfu-kras.ru/e/166 ребят, он? Не переживайте, искать и бить не буду, просто праздный интерес. Просто неужели такой интелигентный с виду человек…
Это общепринятые цпп термины, которые способствуют взаимопониманию. А ты чего-то там себе нафантазировал, только это не цпп.
Только, клоун, ты не ответил за балабольство. И никакого цпп не существует. Ты уже обгадился с мусором.
Опять же, все твои потуги сводятся к тому, что ты нажрался где-то пропаганды. И даже не осилил нормально сослаться на стандарт.
16.3.30
[defns.valid]
valid but unspecified state
value of an object that is not specified except that the object’s invariants are met and operations on the
object behave as specified for its type
Т.е. единственная твоя возможность - уйти в несознанку, что ты и сделал. Ты проигнорировал все свои факапы, начав блеять про базворды.
Но проблема не в том как базворд звучит(хотя и здесь ты обгадился) - проблема в том, что ты в него вкладываешь смысл тот, которого нет. А когда тебя валяют в дерьме - ты начинаешь ссылаться на «да ведь есть же - так же называется», хотя тебя не за это спрашивают.
Правда очевидно, что я, как и любой другой вменяемый человек, вытирал жопу стандартом. Стандарт(вернее не сам стандарт, а нелепые попытки ссылаться на него) - это для бездарного хомячья типа тебя, который нихрена не знает, бегает по помойкам и что-то за кем-то повторяет.
Расчёт здесь на то, что один идиот ничего не знает и его сосед по парте ничего не знает. От того им привычно кидаться базвордами - всё равно никто ничего не проверит и не поймёт.
Здесь это чётко видно. Что школопендра нам пытается перепащивать херню из интернета, причём криво. Но не перепащивает то,что нужно. А нужна именно трактовка базворда, потому как именно о ней идёт спор. А не о чём-либо другом.
Поэтому мало то, что ты обгадился, ведь из неспецифицированного состояния ничего не следует. Любое состояние строки по определению не специфицируется. Т.е. смысла в твоей потуги ноль.
[defns.unspecified]
unspecified behavior behavior, for a well-formed program construct and correct data, that depends on the implementation
[Note 1 to entry: The implementation is not required to document which behavior occurs. The range of possible behaviors is usually delineated by this document.— end note]
Поведение, которое зависит от реализации. Более того, может быть незадокументировано, и без всяких гарантий стабильности. Закладывайся на это на здоровье, раз для тебя это не мусор. Больше на тебя не реагирую.
На мой взгляд весь этот механизм наиболее наглядно расписан у Скота Майерса в Effective Modern C++. Отличная книга, очень советую почитать.
Но попробую напеть своими словами:
Если у тебя есть переменная Type&& t, то она является lvalue, и в функцию ожидающую rvalue ты ее напрямую передать не сможешь. Это можно решить сделав static_cast<Type&&>(t), что собственно std::move и делает.
При написании шаблонов у тебя может возникнуть ситуация, когда ты хочешь принимать и lvalue и rvalue. Для этого существует universal reference, шаблонный_тип&&. Если ты пишешь template <class T> void func(T&& t), то для Type&T будет Type&, а для Type&& - Type. Если тебе нужно прокинуть этот параметр дальше так, что lvalue останется lvalue, а rvalue останется rvalue, ты используешь std::forward.
И работает он на принципе reference collapsing. Когда осуществляется подстановка типов в шаблоне и у тебя получается ссылка на ссылку, то rvalue ссылка получится только если обе ссылки rvalue.
Соответственно, если у тебя T получился Type&, то в std::forward<T>(t)RT будет иметь тип Type&, remove_reference_t<RT> & станет Type& а RT&& - Type&, и вернется lvalue.
А если T получился Type, то в std::forward<T>(t)RT будет иметь тип Type, remove_reference_t<RT> & станет Type& а RT&& - Type&&, и вернется rvalue.
Смежная тема value categories (lvalue, xvalue, rvalue, …). Если английский позволяет, то рекомендую потратить час жизни на это. Дядька вполне подробно и доходчиво объясняет всё в хронологическом порядке (смотрел как-то, мне понравилось).
Дядька вполне подробно и доходчиво объясняет всё в хронологическом порядке (смотрел как-то, мне понравилось).
Там есть неточность. В C не было rvalues. Когда в C говорится про выражение, которое не является lvalue, то так и пишут: «… which is not an lvalue». Специального названия в C нет.
Ясно. Крестовчане изобрели свои макросы с блекджеком и шаблонными шлюхами. Сишечку на свалку. Если судить по приведённым примерам, то мне нравится. Добавляйте в стандарт, я разрешаю.
Да не корми тролля. Он мне и раньше запомнился своим перлом: «крестовая стд header only». Он наверное не в курсе, что libstdc++ аж целых 20 метров, без которой не собрать даже элементарный hello world. Жаль ребят из его ПТУ, такую пургу им втирает.
Почему вы такие убогие, клоуны? Я понимаю, что кастануть мартых вахтёров - это ваш единственный шанс смыть с себя всё дерьмо. Но что удивительно. Вместо того, чтобы осилить матчасть и ли даже просто помолчать, отребье предпочитает выбежать из кустов, обделаться и потом требовать, предварительно сев в лужу, чтобы за ними убрали. Как вы живёте вообще?
Я тебе писал уже, но ты конечно читаешь только свои предложения, я с тобой по теме общаться не буду, пока ты ведешь себе как … меня уже подташнивает оскорбления писать … - некрасиво короче.