0 / 0 / 0
Регистрация: 07.11.2011
Сообщений: 27
|
||||||||||||||||
1 | ||||||||||||||||
Как лучше возвращать значение из операции-функции26.11.2011, 14:26. Показов 2321. Ответов 10
Метки нет (Все метки)
В следующем коде при перегрузке оператора '+' функция возвращает ссылку на временный объект
0
|
26.11.2011, 14:26 | |
Ответы с готовыми решениями:
10
Как дать понять функции в delphi куда возвращать значение Правильно возвращать значение из функции Ошибка в функции (function: должна возвращать значение) В ООП все функции должны возвращать значение? |
5057 / 3117 / 271
Регистрация: 11.11.2009
Сообщений: 7,044
|
|
26.11.2011, 14:33 | 2 |
frostua, разумеется, надо возвращать объект по значению. Вы ведь сами написали, что возвращается ссылка на локальный объект (т.е. на объект, который по выходе из функции перестанет существовать). Вдумайтесь в эту фразу и вы поймёте, что это может сулить.
1
|
Заблокирован
|
||||||||||||||||
26.11.2011, 14:41 | 3 | |||||||||||||||
frostua,
Оба варианта у вас плохие. Во-первых, операнд класса Point должен быть константной ссылкой. В противном случае вы не сможете ваш оператор использовать в некоторых конструкциях. Я не знаю, какие конструкторы есть у вашего класса Point, но будем считать что имеется конструктор по умолчанию. Тогда ваш код не должен компилироваться для следующего выражения
0
|
4226 / 1796 / 211
Регистрация: 24.11.2009
Сообщений: 27,562
|
|
26.11.2011, 15:01 | 4 |
Дело не в том, что лучше. Временный объект можно возвращать только по значению, иначе нельзя, так как после возврата из функции он просто не будет существовать. То, что тебя работает - иллюзия. Первое же передача управления после возврата, но перед использованием другому процессу и ты рискуешь следующим совпадением:
1 в одной странице с этим данным не будет ни каких других твоих данных, 2 тот процесс тоже вызовет функцию. Всё, та функция твой экс-стек испортит. А если результат функции участвует в выражении с ещё какой нибудь функцией, то значение может испортить даже данный процесс, достаточно, если в следующей версии поменяется порядок вызова функций и та другая будет вызываться после, а не до. Причём, отличие той версии может отстоять на тысячи строк.
0
|
0 / 0 / 0
Регистрация: 26.11.2011
Сообщений: 8
|
|
26.11.2011, 15:04 | 5 |
лудше всего сделать allocation и вернуть просто адресс.
с одной стороны обьект не "умрёт после завершения функции" а с другой ты возвращаеш ничего тяжёлого а просто его адресс
0
|
4226 / 1796 / 211
Регистрация: 24.11.2009
Сообщений: 27,562
|
|
26.11.2011, 15:14 | 6 |
Дело не в том, что лучше. Временный объект можно возвращать только по значению, иначе нельзя, так как после возврата из функции он просто не будет существовать. То, что тебя работает - иллюзия. Первое же передача управления после возврата, но перед использованием другому процессу и ты рискуешь следующим совпадением:
1 в одной странице с этим данным не будет ни каких других твоих данных, 2 тот процесс тоже вызовет функцию. Всё, та функция твой экс-стек испортит. А если результат функции участвует в выражении с ещё какой нибудь функцией, то значение может испортить даже данный процесс, достаточно, если в следующей версии поменяется порядок вызова функций и та другая будет вызываться после, а не до. Причём, в исходнике отличие той версии может отстоять на тысячи строк. Или даже ты ничего вообще не менял, просто ещё раз запустил компиляцию, например, для релиза вместо дебага, а компилятор принял иное решение. Так делать вообще нельзя.
1
|
0 / 0 / 0
Регистрация: 07.11.2011
Сообщений: 27
|
||||||
26.11.2011, 15:20 [ТС] | 7 | |||||
я привел полное описание класса, читайте до конца пост.
Ко второму замечанию - результат сложения получается объект класса Point, почему его нельзя поменять, если для него переопределена операция ++
0
|
4226 / 1796 / 211
Регистрация: 24.11.2009
Сообщений: 27,562
|
|
26.11.2011, 15:31 | 8 |
0
|
Заблокирован
|
||||||||||||||||
26.11.2011, 15:41 | 9 | |||||||||||||||
Я не точно выразился. Если у вас есть объявление
Должен работать принцип максимальной предсказуемости. Пользователь рассчитывает на поведение, которое ему уже известно при работе с другими типами.
1
|
0 / 0 / 0
Регистрация: 07.11.2011
Сообщений: 27
|
|
26.11.2011, 15:46 [ТС] | 10 |
-------------
0
|
4226 / 1796 / 211
Регистрация: 24.11.2009
Сообщений: 27,562
|
|
26.11.2011, 15:55 | 11 |
Потому что эта операция изменения, а не сложения и применима только к переменным, а результат сложения - значение, то есть ближе к константам.
0
|
26.11.2011, 15:55 | |
26.11.2011, 15:55 | |
Помогаю со студенческими работами здесь
11
Подскажите пример описания функции, которая будет возвращать значение Как лучше получить значение переменой в функции? Как передавать в аргумент функции массив, и можно ли возвращать его из функции? Как возвращать значение из диалога? Искать еще темы с ответами Или воспользуйтесь поиском по форуму: |
|
Новые блоги и статьи | |||||
Как написать микросервис на C# с Kafka, MediatR, Redis и GitLab CI/CD
InfoMaster 15.01.2025
В современной разработке программного обеспечения микросервисная архитектура стала стандартом де-факто для создания масштабируемых и гибких приложений. Этот подход позволяет разделить сложную систему. . .
|
Что такое CQRS и как это реализовать на C# с MediatR
InfoMaster 15.01.2025
Концепция CQRS и её роль в современной разработке
В современном мире разработки программного обеспечения архитектурные паттерны играют ключевую роль в создании масштабируемых и поддерживаемых. . .
|
Как настроить CI/CD с Azure DevOps
InfoMaster 15.01.2025
CI/ CD, или непрерывная интеграция и непрерывное развертывание, представляет собой современный подход к разработке программного обеспечения, который позволяет автоматизировать и оптимизировать процесс. . .
|
Как настроить CI/CD с помощью Jenkins
InfoMaster 15.01.2025
Введение в CI/ CD и Jenkins
В современной разработке программного обеспечения непрерывная интеграция (CI) и непрерывная доставка (CD) стали неотъемлемыми элементами процесса создания качественных. . .
|
Как написать микросервис на Go/Golang с Kafka и GitHub CI/CD
InfoMaster 14.01.2025
Определение микросервиса, преимущества использования Go/ Golang
Микросервис – это архитектурный подход к разработке программного обеспечения, при котором приложение состоит из небольших, независимо. . .
|
Как написать микросервис с нуля на C# с RabbitMQ, CQRS и CI/CD
InfoMaster 14.01.2025
В современном мире разработки программного обеспечения микросервисная архитектура стала стандартом де-факто для создания масштабируемых и гибких приложений. Этот архитектурный подход предполагает. . .
|
Как создать интернет-магазин на PHP и JavaScript
InfoMaster 14.01.2025
В современном мире электронная коммерция стала неотъемлемой частью бизнеса. Создание собственного интернет-магазина открывает широкие возможности для предпринимателей, позволяя достичь большей. . .
|
Как написать Тетрис на Ассемблере
InfoMaster 14.01.2025
Тетрис – одна из самых узнаваемых и популярных компьютерных игр, созданная в 1984 году советским программистом Алексеем Пажитновым. За прошедшие десятилетия она завоевала симпатии миллионы людей по. . .
|
Как создать игру "Танчики" на Unity3d и C#
InfoMaster 14.01.2025
Разработка игр – это увлекательный процесс, сочетающий в себе творчество и технические навыки. В этой статье мы рассмотрим создание классической игры "Танчики" с использованием Unity3D и языка. . .
|
Организую платный онлайн микро-курс по доработке Android-клиента Telegram
_Ivana 14.01.2025
Официальная версия и распространенные форки не полностью устраивают? Сделай свою кастомную версию клиента!
4 занятия по 2 часа (2 недели пн, ср 19:00-21:00 по Москве).
Первое вводное занятие. . .
|
Как создать приложение для фитнеса для iOS/iPhone на Kotlin
InfoMaster 14.01.2025
Создание собственного фитнес-приложения — это не только захватывающий, но и полезный процесс, ведь оно может стать вашим верным помощником на пути к здоровому и активному образу жизни. В современных. . .
|
Как создать приложение магазина для iOS/iPhone на Swift
InfoMaster 14.01.2025
Введение в разработку iOS-приложений
Разработка приложений для iPhone и других устройств на базе iOS открывает огромные возможности для создания инновационных мобильных решений. В данной статье мы. . .
|