LINUX.ORG.RU

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

«В валидном но неопределенном состоянии». Так лучше?

Нет, выкинь пропаганду. Состояние не просто валидное - оно определённое. Определяется реализацией. Точно так же как и всё остальное.

С т.з. raii ресурс будет потерян. Но раишные объекты не могут существовать без ресурса, потому ресурс там будет, но будет пустой. Если базовая семантика нарушается - это проблема реализации. Тоже самое может быть где угодно, поэтому мы исходит из того, что семантика не нарушается.

История с состоянием, мусором и прочим - это нелепая раст и прочая бездарная пропаганда.

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

Определяется реализацией.

Естественно, но не цпп стандартом ведь, об этом речь. Может некий мой библиотечный raii класс Data c хенделами внутри, весь его ливер - на моё усторение, поэтому «неопределенное».

pavlick ★★
()

@Lzzz покруче, покруче «заворачивайте».
Будете «вумной як вутка» и все коллеги уважать будут за «знания».

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

Естественно, но не цпп стандартом ведь, об этом речь.

Чушь нелепая.

Может некий мой библиотечный raii класс Data c хенделами внутри, весь его ливер - на моё усторение, поэтому «неопределенное».

Ещё большая чушь нелепая. Я сказа сказал, что не жри пропаганду. Но ты продолжаешь.

Твои заходы нелепы и не состоятельны. Любая логика, которая может быть переопределена - может быть переопределена как угодно. Везде. Таким образом любое копирование любых объектов - не определено, потому как оно может делать что угодно.

Поэтому, объект всегда валиден и всегда определён. По определению. Если это не так - твоя реализация не соблюдает семантику raii и семантику операции.

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

Поэтому и методичку выкинь. И не потребляй больше пропаганды этой нелепой.

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

Ну это уже занудство какое-то. У буржуев состояние объекта правильно называется «unspecified but valid», хз как правильно перевести unspecified, перевёл «неопределённое». Думал, что здесь люди понимают, но не все …

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

Но раишные объекты не могут существовать без ресурса, потому ресурс там будет, но будет пустой

Только в твоих фантазиях. Раишные объекты никак не связаны с наличием ресурса. Точнее, связаны, но это ничего не значит. Напересдачу, клоун

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

Ну это уже занудство какое-то.

Нет, ты запутался в методичке.

У буржуев состояние объекта правильно называется «unspecified but valid»

Это полная и нелепая чушь. Это пишут бездарные идиоты, которые нажрались пропаганды. В реальности ничего этого не существует, от того ты и поплыл с первого же ответа.

хз как правильно перевести unspecified, перевёл «неопределённое». Думал, что здесь люди понимают, но не все …

Не в этом проблема. Неважно как это переводится - это чушь. Поведение специфицировано не меньше, чем любое другое.

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

К тому же язык специфицирует только базовое поведение. И вот в рамках него поведение определено. Потому что это копирование, что там, что там. Точно так же поведение даже на уровне идиом определено. Везде.

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

Царь, где блог с нуля на плюсах?

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

Это общепринятые цпп термины, которые способствуют взаимопониманию. А ты чего-то там себе нафантазировал, только это не цпп. ЦПП стандарт:

[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.

Поэтому какую-то чушь несёшь ты.

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

Царь не может в стандарт. Он уже не в первый раз это демонстрирует.

anonymous
()

http://ikit.sfu-kras.ru/e/166 ребят, он? Не переживайте, искать и бить не буду, просто праздный интерес. Просто неужели такой интелигентный с виду человек…

rumgot ★★★★★
()
Последнее исправление: rumgot (всего исправлений: 1)
Ответ на: комментарий от anonymous

Царь един, а этот даже не издает характерных звуков курятника.

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

Кстати, на зачете намекни, что от Павлика, разговор сразу пойдёт в ином русле )), но только тонко, ну там привет передай.

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

Это общепринятые цпп термины, которые способствуют взаимопониманию. А ты чего-то там себе нафантазировал, только это не цпп.

Только, клоун, ты не ответил за балабольство. И никакого цпп не существует. Ты уже обгадился с мусором.

Опять же, все твои потуги сводятся к тому, что ты нажрался где-то пропаганды. И даже не осилил нормально сослаться на стандарт.

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

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

Но проблема не в том как базворд звучит(хотя и здесь ты обгадился) - проблема в том, что ты в него вкладываешь смысл тот, которого нет. А когда тебя валяют в дерьме - ты начинаешь ссылаться на «да ведь есть же - так же называется», хотя тебя не за это спрашивают.

Правда очевидно, что я, как и любой другой вменяемый человек, вытирал жопу стандартом. Стандарт(вернее не сам стандарт, а нелепые попытки ссылаться на него) - это для бездарного хомячья типа тебя, который нихрена не знает, бегает по помойкам и что-то за кем-то повторяет.

Расчёт здесь на то, что один идиот ничего не знает и его сосед по парте ничего не знает. От того им привычно кидаться базвордами - всё равно никто ничего не проверит и не поймёт.

Здесь это чётко видно. Что школопендра нам пытается перепащивать херню из интернета, причём криво. Но не перепащивает то,что нужно. А нужна именно трактовка базворда, потому как именно о ней идёт спор. А не о чём-либо другом.

Поэтому мало то, что ты обгадился, ведь из неспецифицированного состояния ничего не следует. Любое состояние строки по определению не специфицируется. Т.е. смысла в твоей потуги ноль.

К тому же в реальности это состояние специфицировано.

Поэтому какую-то чушь несёшь ты.

Ну ка клоун, побежал пояснять за чушь. Побежал её показывать.

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

Ты реально нездоров, как ты людей учишь …

[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]

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

pavlick ★★
()

На мой взгляд весь этот механизм наиболее наглядно расписан у Скота Майерса в 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.

Он выглядит примерно так:

template <class RT>
RT&& forward(remove_reference_t<RT> &param) {
    return static_cast<RT&&>(param);
}

И работает он на принципе 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.

anonymous
()

Смежная тема value categories (lvalue, xvalue, rvalue, …). Если английский позволяет, то рекомендую потратить час жизни на это. Дядька вполне подробно и доходчиво объясняет всё в хронологическом порядке (смотрел как-то, мне понравилось).

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

Дядька вполне подробно и доходчиво объясняет всё в хронологическом порядке (смотрел как-то, мне понравилось).

Там есть неточность. В C не было rvalues. Когда в C говорится про выражение, которое не является lvalue, то так и пишут: «… which is not an lvalue». Специального названия в C нет.

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

Ну и вообще в том видео кривым колхозным языком всё рассказывается. Объекты и выражения смешиваются/путаются направо и налево.

anonymous
()
Ответ на: комментарий от mamos3
using f_negovna(using auto x) {
  f(x);
}

Чёт первый раз вижу using таких местах. Опять цепепе вперёд ускакал. Что это значит?

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

Там указано, компилятор с каким пропозалом зайдействован.

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

Ясно. Крестовчане изобрели свои макросы с блекджеком и шаблонными шлюхами. Сишечку на свалку. Если судить по приведённым примерам, то мне нравится. Добавляйте в стандарт, я разрешаю.

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

Да не корми тролля. Он мне и раньше запомнился своим перлом: «крестовая стд header only». Он наверное не в курсе, что libstdc++ аж целых 20 метров, без которой не собрать даже элементарный hello world. Жаль ребят из его ПТУ, такую пургу им втирает.

pavlick ★★
()

Ох, как ты ненавидишь и хаешь то, чего у тебя самого нет и с такими социальными навыками никогда не будет.

rumgot ★★★★★
()

Почему вы такие убогие, клоуны? Я понимаю, что кастануть мартых вахтёров - это ваш единственный шанс смыть с себя всё дерьмо. Но что удивительно. Вместо того, чтобы осилить матчасть и ли даже просто помолчать, отребье предпочитает выбежать из кустов, обделаться и потом требовать, предварительно сев в лужу, чтобы за ними убрали. Как вы живёте вообще?

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

Тебе все ответили. Если захочешь - вникнешь. Хочешь другого отношения - измени свое. Общайся культурно.

Как вы живёте вообще?

А кем ты работаешь?

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

Я чёт вообще мысли не понял

Я тебе писал уже, но ты конечно читаешь только свои предложения, я с тобой по теме общаться не буду, пока ты ведешь себе как … меня уже подташнивает оскорбления писать … - некрасиво короче.

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

даже просто помолчать

Зеркальный вопрос.

осилить матчасть

Зеркальный вопрос.

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

А каким боком move/forward к социальным навыкам? Я чёт вообще мысли не понял

И ты вообще заметил, что я с тобой по move/forward не веду дискуссий? К тому-же это прекрасно расписано у Мейерса и Джоссатиса.

rumgot ★★★★★
()
Последнее исправление: rumgot (всего исправлений: 2)
Ответ на: комментарий от anonymous

Прошу прощения. Видимо это другому предназначалось.

rumgot ★★★★★
()
Последнее исправление: rumgot (всего исправлений: 1)
Вы не можете добавлять комментарии в эту тему. Тема перемещена в архив.