Форум программистов, компьютерный форум, киберфорум
Наши страницы

Указатель на функцию, укзатель на воид и возвращаемое функцией значение - C++

Войти
Регистрация
Восстановить пароль
Другие темы раздела
C++ Замена структуры с функциями на класс с методами http://www.cyberforum.ru/cpp-beginners/thread1239995.html
Заменить код приведенный ниже на соответствующие объявление класса golf. Замените функцию setgolf(golf & g, const char*name, int hc); конструктором с соответствующими аргументами для обеспечения...
C++ Проверка на равенство буквы и элемента из массива выдает ошибку вот такая проблема инструкция else if (A == "й" || A == "Й" )//дает ошибку 1 no conversion from 'const char *' to 'int' //и ошибку 2 int' differs in levels of indirection from... http://www.cyberforum.ru/cpp-beginners/thread1239985.html
C++ Компиляция класса вектор. Ошибка: missing template arguments before «v»
Собственно код: #include <iostream> #include <fstream> #include <vector> #include <string> using namespace std; int main(){
Как получить адрес переменной типа unsigned char? C++
Всем привет! Как получить адрес переменной типа unsigned char? Всё ерунда получается #include <iostream> using namespace std; int main() {
C++ Что означает эта строчка? http://www.cyberforum.ru/cpp-beginners/thread1239974.html
cout<<MyClass::addn(2)<<endl;
C++ Требуется посчитать сумму целых чисел от 1 до N Добрый день подскажите такой вопрос? решил порешать задачи на этом сайте: Сумма (Время: 1 сек. Память: 16 Мб Сложность: 19%) Требуется посчитать сумму целых чисел от 1 до N. Входные данные... подробнее

Показать сообщение отдельно
DrOffset
7377 / 4454 / 1009
Регистрация: 30.01.2014
Сообщений: 7,304
08.08.2014, 16:44
Цитата Сообщение от orange_fox Посмотреть сообщение
Хотел делать каст, но в VS2013 скомпилировался даже без каста.
Это бывает. Тем не менее на других компиляторах этот код приведет к ошибке.
Цитата Сообщение от orange_fox Посмотреть сообщение
что это?
Undefined\Unspecified behaviour - неопределенное поведение. Ситуация, когда стандартом языка не может быть гарантировано адекватное исполнение в общем случае. Конкретно в этом случае есть платформы, где сегменты кода и сегменты данных - это разные области и адресация там тоже может быть разная (разная вплоть до физического представления). Следовательно нет возможности гарантировать приводимость адресов из одного сегмента в другой (более того, зачастую, это бессмысленно). Для x86 этот код будет работать, но, в том числе, из-за описанного выше, писать нестандартный или завязанный на UB код крайне не рекомендуется (особенно в профессиональной разработке - ведь неизвестно на какую платформу менеджмент в будущем захочет портировать уже написанный софт).
Кстати также нельзя в общем случае гарантировать приводимость указателя к целому числу без потерь, хотя опять же, на x86 это работает и многие уверены что так будет везде.
Цитата Сообщение от orange_fox Посмотреть сообщение
Можно пример для моего случая?
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
double a()
{
    cout << 123 << endl;
    return 23.4;
}
int b()
{
    cout << 123 << endl;
    return 11;
}
 
string c()
{
    cout << 123 << endl;
    return "string";
}
 
template <typename FunctorT>
void execute(FunctorT f)
{
    f();
}
 
 
int main()
{
    execute(a);
    execute(b);
    execute(c);
}
Добавлено через 3 минуты
orange_fox, немного не акцентировал суть насчет void *. Он предназначен для хранения адресов данных. Для адресов функций по вышеизложенным причинам в общем случае он не подойдет.
1
 
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2017, vBulletin Solutions, Inc.