Функция для возврата нескольких значений - страница 2

 
Zhunko:

Какие обиды? :-)) Что не понравилось? Конкретнее...

Alsu уже дал ответ -- это оптимальный способ.

2 инта занимают 8 байт и не могут быть объединены в дабл без потерь приведенным способом. Большие значения будут биться.

А если надо строку и два дабла вернуть?

 
TheXpert:

Alsu уже дал ответ -- это оптимальный способ.

2 инта занимают 8 байт и не могут быть объединены в дабл без потерь приведенным способом. Большие значения будут биться.

А если надо строку и два дабла вернуть?

Не претендовал на оптимальность. Просто ответил на вопрос автора темы.

Два дабла не выйдет в MQL4, но строку в 24 символа так можно. Но зачем? Тут строки и так возвращаются.

 
TheXpert:
Вадим, вы иногда такую {...} несете...

Вадим возможно просто привык, что "вернуть" можно операцией "return".
А несколько значений через параметры- "можно передать".
Так что это чисто вопрос применения терминологии.
.
При внимательном прочтении функций WinAPI можно встретить
перед параметрами примерно такие комментарии:
/* in */
/* in, out */
/* out */
.
Т.е. бывают ситуации, когда параметры чисто "входные"-
бывают "модифицируемые", бывают чисто "выходные".
.
Ну, и если человек не может написать в явном виде
const int & param - или более актуальное в C++ типа
const std::wstring & str (для явного задания параметров как /* in */)
а вынужден писать неконстные выражения-
то это риск получить фиг знает что, потому что переменные в итоге
могут быть модифицированы неожиданно.
.
Так что функция с параметрами void f(int & a, int & b) -
при определенных условиях- это возврат из функции двух значений.
Который может закончится неожиданностью ;-).

 
jartmailru:.

Так что функция с параметрами void f(int & a, int & b) -
при определенных условиях- это возврат из функции двух значений.
Который может закончится неожиданностью ;-).

Поэтому

1. я такие функции всегда оформляю в виде bool f(int & a, int & b), чтобы вызывающая сторона знала, что вызов прошел успешно

2. проверяю возвращаемые значения.

И какие же интересно неожиданности могут быть, если a и b предназначены именно для вывода? Придерживаемся MQL, т.е. никаких указателей, выделений памяти, етц.

 

Ну как какие неожиданности. Когда я начинал программировать на си,
у меня при списывании с учебника программы "hello world" было 10 ошибок.
Причем я не мог найти их сам :-).

 
Андрей (jartmailru) имеет ввиду, и как он меня научил, параметры можно модифицировать, как угодно, но это не является признаком комфортного программирования. Т.е. возможны ошибки, которые трудно прогнозировать и искать в крупных проектах. Я это давно усвоил. Модификация параметров в моих проектах крайне редка, а не модифицируемые параметры всегда объявлены константами.
 

:)

Весна, Париж, раннее солнечное утро ...

Молодой человек, вышедший на утреннюю зарядку, отжимается на дорожке сквера.

Видавший всякое пожилой дворник: "Мсье, Вы не заметили, что Ваша дама уже ушла?".

 
tara:
"Мсье, Вы не заметили, что Ваша дама уже ушла?".
А "вас тут не стояло"... (с)
Впрочем, вам я уже не буду объяснять, кто не дурак и почему.
Можете верить в собственную исключительность.
.
P.S.: последний раз, играя в бильярд по 10 отжиманий
на фол несколько перенапрягся.
 
jartmailru:
А "вас тут не стояло"... (с)
Впрочем, вам я уже не буду объяснять, кто не дурак и почему.
Можете верить в собственную исключительность.
.
P.S.: последний раз, играя в бильярд по 10 отжиманий
на фол несколько перенапрягся.
Не надо так близко воспринимать мною сказанное,- я редко играю на бильярде и вовсе не играю в него, тем более - на отжимания. Меня тут, действительно, "не стояло". Могу.
 

Вот что бывает, когда люди не изучающие программирование в целом, начинают сразу учить MQL.

Короче создаем структуру данных (которая как бы и тип одновременно), а внутри структурка из любых типов, как вашей душе удобно.

Обьявляем структуру. Обычное обьявление переменной, но только тип будет как ИМЯ_СТРУКТУРЫ.

Потом в обьявлении функции будет тип

ИМЯ_СТРУКТУРЫ название_функции(бла бла бла)
{
   бла бла бла;

    СТРУКТУРА.А = 10;

    CТРУКТУРА.Б = 15;

   return = СТРУКТУРА

}


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

Причина обращения: