powered by simpleCommunicator - 2.0.59     © 2025 Programmizd 02
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Форумы / C++ [игнор отключен] [закрыт для гостей] / Простой вопрос
25 сообщений из 54, страница 2 из 3
Простой вопрос
    #39631117
Котовасия
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Пардон,
Котовасия...
ОК, сразу понятно, что также указатели ссылки полезны в общем случае, когда нужен доступ к объекту, например:
...
...
Рейтинг: 0 / 0
Простой вопрос
    #39631120
cronix111
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Насколько я помню:
std::string s - вызывается конструктор копии и создается новый объект.
std::string &s - не вызывается конструктор копии и новый объект не создается, т.к. по сути, как писали выше, это неизменяемый указатель.
...
Рейтинг: 0 / 0
Простой вопрос
    #39631255
Фотография CEMb
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
cronix111std::string s - вызывается конструктор копии и создается новый объект.

Это важный момент, кстати. Для понимания лучше написать класс, который в конструкторе и деструкторе выкидывает сообщение об этом ("ctor"/"dtor"), например, в поток, а потом объект этого класса попробовать попередавать в разных вариантах в качестве параметра в функции. Потом добавить наследование, виртуализацию, попередавать объекты дочерних классов и так далее.
И ещё полезно посмотреть под дебагом ассемблерный код.
...
Рейтинг: 0 / 0
Простой вопрос
    #39631319
Фотография MasterZiv
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Dimitry SibiryakovКотовасияНу, в каком случае имеет смысл использовать b вместо использования a?

Я, например, использую тупо для сокращения кода:
Код: sql
1.
2.
3.
MyClass& var = Some->super()->expression[to].getIt();
var.a = 1;
var.b = 2;




Да, для сокращения кода самое очевидное использование.
...
Рейтинг: 0 / 0
Простой вопрос
    #39631320
rdb_dev
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
semen.s.semenМожет быть как rvalue ?Нет, именно как lvalue!
lvalue и rvalue, это не синонимы для левой и правой частей выражения.
...
Рейтинг: 0 / 0
Простой вопрос
    #39631322
rdb_dev
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Dima TДа ладно?...
Код: plaintext
1.
int & rInt = *(int*)NULL;

Основное различие в том, что ссылка должна быть обязательно проинициализирована выражением, расценивающимся как lvalue.
Попробуй написать свой пример без использования указателей [/quot]Зачем?
...
Рейтинг: 0 / 0
Простой вопрос
    #39631325
Фотография MasterZiv
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
КотовасияMasterZiv,

расскажи про ссылки, пожалуйста. Не в контексте "ссылка как описатель аргумента функции", а в контексте "ссылка как альтернативное имя объекта", например:

Код: plaintext
1.
2.
int a;
int & b = a;



Если объект b - всего лишь синоним объекта a, то для чего он этот синоним вообще нужен? Ну, в каком случае имеет смысл использовать b вместо использования a?

Ну, общефилософски я бы не пытался рассуждать в сторону анализа.
Я бы рассуждал синтетически, у вас есть такая возмжоность в языке, вы можете применять её там, где вам удобно.
В любой момент вы можете присвоить объекту ещё одно имя. и даже несколько.

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

Сотни применений разных.
...
Рейтинг: 0 / 0
Простой вопрос
    #39631327
Фотография MasterZiv
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
semen.s.semenКотовасияпропущено...


Да. Сейчас сын в ВУЗе изучает, я сбоку пристроился... :)

А я вот спрашиваю себя - ну и нахера я стока времени на Java потратил )

Прекрасно слышать слова твои !
...
Рейтинг: 0 / 0
Простой вопрос
    #39631328
rdb_dev
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
semen.s.semenКотовасия,

Плюсы прекрасны )
Это ты еще до ссылок на rvalue и шаблонов перемещения не дошел...
...
Рейтинг: 0 / 0
Простой вопрос
    #39631333
rdb_dev
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
semen.s.semenКотовасия,

Плюсы прекрасны )На, прослезись от счастья! :)
Декларатор ссылки Rvalue (&&); конструктор перемещения; точная пересылка; RVO/NRVO и прочее, и прочее...
...
Рейтинг: 0 / 0
Простой вопрос
    #39631340
Фотография CEMb
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
semen.s.semenА я вот спрашиваю себя - ну и нахера я стока времени на Java потратил )

великий английский писатель Френцх ПровербA man who knows two languages is worth two men.к программистам это относится как никогда кстати.
...
Рейтинг: 0 / 0
Простой вопрос
    #39631341
Фотография CEMb
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
rdb_devНа, прослезись от счастья! :)и это он ещё шаблоны не видел
...
Рейтинг: 0 / 0
Простой вопрос
    #39631350
rdb_dev
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Dimitry Sibiryakov
Код: sql
1.
2.
3.
MyClass& var = Some->super()->expression[to].getIt();
var.a = 1;
var.b = 2;

А я "иногда" даже так делаю, чтобы в объемной реализации поменьше символов печатать и чтобы код был более читаемым:
Код: plaintext
1.
2.
3.
4.
5.
6.
7.
8.
MyClass& __fastcall operator+= (const MyClass & add)
{
  MyClass & me = *this;
  .
  .
  .
  return me;
}
...
Рейтинг: 0 / 0
Простой вопрос
    #39631352
rdb_dev
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
CEMbrdb_devНа, прослезись от счастья! :)и это он ещё шаблоны не виделТам и увидит! И std::move и std::forward и многое другое. :)
...
Рейтинг: 0 / 0
Простой вопрос
    #39631585
semen.s.semen
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
rdb_devsemen.s.semenМожет быть как rvalue ?Нет, именно как lvalue!
lvalue и rvalue, это не синонимы для левой и правой частей выражения.

Расскажите, пожалуйста что Вы имеете ввиду

По моей информации

Любое выражение в C++ относится к категории lvalue(левостороннее выражение) либо rvalue (правостороннее выражение). lvalue выражение это объект, который имеет имя. Все переменные являются lvalue. rvalue — это временный объект, которые не существует за пределами выражения, которое его создало. В следующем примере a является lvalue, а результат выражения 2 + 2 — rvalue.
...
Рейтинг: 0 / 0
Простой вопрос
    #39631612
rdb_dev
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
semen.s.semen, вот тут, как раз, есть одна особенность. Обычно, ссылка инициализируется, как ссылка на lvalue, но не всегда. Например, при передаче значения из перегруженного для класса оператора "+", может быть возвращена ссылка на временный результат - rvalue (временный экземпляр класса) и этот rvalue не обязательно должен быть const, так как в современном стандарте C++ существует такое понятие, как "конструктор пересылки" (не путать с конструктором копии). Задача конструктора пересылки - оптимизация передачи результата в lvalue. Простой пример - допустим, у тебя есть некий класс, в котором одним из членов является указатель на какой-то массив данных и чтобы не копировать весь этот массив данных из временного объекта rvalue, конструктор пересылки может скопировать к себе указатель не создавая копию этого массива и "обнулить" указатель во временном объекте, чтобы деструктор временного объекта не освободил память с массивом данных.
...
Рейтинг: 0 / 0
Простой вопрос
    #39631951
semen.s.semen
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
rdb_devsemen.s.semen, вот тут, как раз, есть одна особенность. Обычно, ссылка инициализируется, как ссылка на lvalue, но не всегда. Например, при передаче значения из перегруженного для класса оператора "+", может быть возвращена ссылка на временный результат - rvalue (временный экземпляр класса) и этот rvalue не обязательно должен быть const, так как в современном стандарте C++ существует такое понятие, как "конструктор пересылки" (не путать с конструктором копии). Задача конструктора пересылки - оптимизация передачи результата в lvalue. Простой пример - допустим, у тебя есть некий класс, в котором одним из членов является указатель на какой-то массив данных и чтобы не копировать весь этот массив данных из временного объекта rvalue, конструктор пересылки может скопировать к себе указатель не создавая копию этого массива и "обнулить" указатель во временном объекте, чтобы деструктор временного объекта не освободил память с массивом данных.

Ничего не понял

Если не сложно - дайте Ваше строгое определение того что такое rvalue и lvalue

Также буду благодарен за описание того как работает std::move and std::forward
...
Рейтинг: 0 / 0
Простой вопрос
    #39631952
semen.s.semen
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
CEMbrdb_devНа, прослезись от счастья! :)и это он ещё шаблоны не видел

Видел
...
Рейтинг: 0 / 0
Простой вопрос
    #39632032
Dima T
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
semen.s.semenCEMbпропущено...
и это он ещё шаблоны не видел

Видел
boost посмотри
...
Рейтинг: 0 / 0
Простой вопрос
    #39632040
semen.s.semen
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Dima Tsemen.s.semenпропущено...


Видел
boost посмотри

И буст видел
...
Рейтинг: 0 / 0
Простой вопрос
    #39632042
Dima T
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
semen.s.semenИ буст видел
Поздравляю, я видел и больше видеть не хочу. Изучать портянки на 1000+ строк с сообщением ошибки компиляции из-за одной неверной буковки в коде - не мое.
...
Рейтинг: 0 / 0
Простой вопрос
    #39632049
Dima T
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
semen.s.semenТакже буду благодарен за описание того как работает std::move and std::forward
Отличная книга в т.ч. про это https://www.ozon.ru/context/detail/id/34747131/

Букав немного, советую найти и почитать.
...
Рейтинг: 0 / 0
Простой вопрос
    #39632083
Котовасия
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Dima T...boost посмотри
Имхо, бустом просто страшилка. Народ на ЛОРе, когда в друг дружку какашки кидает. Новичков опять же пугают.
Реально возможно никто не использует. :)
...
Рейтинг: 0 / 0
Простой вопрос
    #39632132
rdb_dev
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
semen.s.semenЕсли не сложно - дайте Ваше строгое определение того что такое rvalue и lvalue

Также буду благодарен за описание того как работает std::move and std::forwardШо, опять? :)
Держи: 21344431
...
Рейтинг: 0 / 0
Простой вопрос
    #39632145
Фотография CEMb
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
КотовасияРеально возможно никто не использует. :)я использую, мало, но рад. Радует то, что можно взять только нужный кусок от буста, не надо тащить всё. Использовал несколько раз для парсинга xml-ек. И для чего-то ещё, уже не помню. Хотел недавно взять для работы с графами, но он не подошёл по религиозным причинам

Кроме того, в бусте вроде как давно уже сделано то, что потом стало появляться в 11/14/17. В общем, если чего-то не хватает в стандарте, можно посмотреть в бусте.

rdb_devДержии вот это
...
Рейтинг: 0 / 0
25 сообщений из 54, страница 2 из 3
Форумы / C++ [игнор отключен] [закрыт для гостей] / Простой вопрос
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


Просмотр
0 / 0
Close
Debug Console [Select Text]