Форум программистов
 

Восстановите пароль или Зарегистрируйтесь на форуме, о проблемах и с заказом рекламы пишите сюда - alarforum@yandex.ru, проверяйте папку спам!

Вернуться   Форум программистов > IT форум > Помощь студентам
Регистрация

Восстановить пароль
Повторная активизация e-mail

Купить рекламу на форуме - 42 тыс руб за месяц

Ответ
 
Опции темы Поиск в этой теме
Старый 27.04.2024, 13:10   #1
Sergy__
Новичок
Джуниор
 
Регистрация: 27.04.2024
Сообщений: 1
По умолчанию Поясните, пожалуйста, как работает этот код, и почему используется амперсанд, а не звездочка?

#include <iostream>
using namespace std;
typedef long (*Long_Long)(long, long, short);
typedef float (*Float_Float) (float, float, float);
typedef string(*String_String) (string, string, string);
typedef double (*Double_2Char) (double, char, char);
typedef double (*Double_Long_Char) (double, long, char);
// typedef string(*String_2Char) (string, char, char);
typedef string(*String_Long_Char) (string, int, int);
template <typename T1, typename T2, typename T3> T1 SUMMA(T1 x1, T2 x2, T3 x3)
{
T1 z= x1 + (T1)x2 + (T1)x3;
return z;
}
int main()
{
void* ptr;
((Long_Long&)ptr) = SUMMA;
cout << ((Long_Long&)ptr)(80000, 10000, 455) << endl;
(Float_Float&)ptr = SUMMA;
cout << ((Float_Float&)ptr)(1.2e+38, 0.8e+38, 1.4e+38) << endl;
((String_String&)ptr) = SUMMA;
cout << ((String_String&)ptr)("ABCD", "efgh", "12345") << endl;
((Double_2Char&)ptr) = SUMMA;
cout << ((Double_2Char&)ptr)(1000, 'A', 'a') << endl;
((Double_Long_Char&)ptr) = SUMMA;
cout << ((Double_Long_Char&)ptr)(1000, 100000, 'A');
return 0;
}
Sergy__ вне форума Ответить с цитированием
Старый 28.04.2024, 06:41   #2
Алексей1153
фрилансер
Форумчанин
 
Регистрация: 11.10.2019
Сообщений: 969
По умолчанию

Цитата:
Сообщение от Sergy__ Посмотреть сообщение
почему используется амперсанд, а не звездочка
где именно?

в коде полно UB

вот так лучше
Код:
#include <iostream>

template <typename T1, typename T2, typename T3>
auto SUMMA(T1 x1, T2 x2, T3 x3)
{
    return x1 + x2 + x3;
}

int main()
{
    using std::string;
    
    {auto p=&SUMMA<long,long,short>       ; std::cout << p(80000, 10000, 455) << '\n';}
    {auto p=&SUMMA<float, float, float>   ; std::cout << p(1.2e+38, 0.8e+38, 1.4e+38) << '\n';}
    {auto p=&SUMMA<string, string, string>; std::cout << p("ABCD", "efgh", "12345") << '\n';}
    {auto p=&SUMMA<double, char, char>    ; std::cout << p(1000, 'A', 'a') << '\n';}
    {auto p=&SUMMA<double, long, char>    ; std::cout << p(1000, 100000, 'A') << '\n';}
    
    return 0;
}

Последний раз редактировалось Алексей1153; 29.04.2024 в 06:34.
Алексей1153 вне форума Ответить с цитированием
Старый 28.04.2024, 10:56   #3
digitalis
Старожил
 
Аватар для digitalis
 
Регистрация: 04.02.2011
Сообщений: 4,555
По умолчанию

Среди множества расшифровок UB не нашёл ничего соответствующего - может быть : Unclear Bardak ?
digitalis вне форума Ответить с цитированием
Старый 29.04.2024, 06:34   #4
Алексей1153
фрилансер
Форумчанин
 
Регистрация: 11.10.2019
Сообщений: 969
По умолчанию

digitalis, undefined behavior
Алексей1153 вне форума Ответить с цитированием
Старый 29.04.2024, 10:12   #5
digitalis
Старожил
 
Аватар для digitalis
 
Регистрация: 04.02.2011
Сообщений: 4,555
По умолчанию

Вот оно как...
Но в общем-то - моя расшифровка недалека от этой
digitalis вне форума Ответить с цитированием
Старый 29.04.2024, 10:17   #6
Алексей1153
фрилансер
Форумчанин
 
Регистрация: 11.10.2019
Сообщений: 969
По умолчанию

да.
Алексей1153 вне форума Ответить с цитированием
Ответ


Купить рекламу на форуме - 42 тыс руб за месяц



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Помогите,пожалуйста, почему-то код не работает. alonil Assembler - Ассемблер (FASM, MASM, WASM, NASM, GoASM, Gas, RosAsm, HLA) и не рекомендуем TASM 6 11.03.2023 03:30
обьясните пожалуйста как работает этот код подразрядной сортировки - C++ Александр121 Помощь студентам 1 19.01.2018 14:03
Поясните мне этот код шаг за шагом kroatoani Общие вопросы Delphi 5 21.09.2010 14:21
почему этот код интерфейса не работает. KWN, lnc Помощь студентам 5 30.01.2010 10:54