Форум программистов, компьютерный форум CyberForum.ru

Как объявить функцию без прототипа - C++

Восстановить пароль Регистрация
 
 
Рейтинг: Рейтинг темы: голосов - 14, средняя оценка - 5.00
bgm313
12 / 12 / 2
Регистрация: 27.07.2012
Сообщений: 208
01.09.2012, 20:15     Как объявить функцию без прототипа #1
Во всех учебниках пишут, что каждая функция должна иметь прототип. ВОт стало интересно, можно ли объявить функцию, которая не имеет прототип. Если да, то как? Покажите.
Лучшие ответы (1)
После регистрации реклама в сообщениях будет скрыта и будут доступны все возможности форума.
ValeryLaptev
Эксперт C++
1005 / 784 / 46
Регистрация: 30.04.2011
Сообщений: 1,595
01.09.2012, 21:28     Как объявить функцию без прототипа #21
Цитата Сообщение от bgm313 Посмотреть сообщение
auto func = [](int x) -> int { return x+5; };

Если можно пояснить что это за конструкция или сказать что почитать?
Стандарт почитать С++11. В книжках пока ничего такого не описано.
После регистрации реклама в сообщениях будет скрыта и будут доступны все возможности форума.
ForEveR
Модератор
Эксперт C++
 Аватар для ForEveR
7927 / 4709 / 318
Регистрация: 24.06.2010
Сообщений: 10,524
Завершенные тесты: 3
01.09.2012, 21:29     Как объявить функцию без прототипа #22
ValeryLaptev, Описано. The C++ Standard Library Second Edition Nicolai M. Josuttis
Почему вы избегаете использовать возможности С++11 ?
Почему вы избегаете использовать возможности С++11 ?
PSIAlt
 Аватар для PSIAlt
86 / 86 / 8
Регистрация: 19.06.2012
Сообщений: 245
01.09.2012, 21:40     Как объявить функцию без прототипа #23
Цитата Сообщение от ~OhMyGodSoLong~ Посмотреть сообщение
Я имею в виду вывести. Чтобы вообще не писать кусок (int x) -> int, в котором прописаны типы аргументов и возвращаемого значения. Исключительно по телу функции.
Ну тогда это был бы не строго типизированный язык.

Цитата Сообщение от ForEveR Посмотреть сообщение
Неверно. func не будет тем, что вы сказали. closure это совершенно отдельный тип, не указатель на функцию.
okay
OhMyGodSoLong
~ Эврика! ~
 Аватар для OhMyGodSoLong
1234 / 983 / 42
Регистрация: 24.07.2012
Сообщений: 2,002
01.09.2012, 21:56     Как объявить функцию без прототипа #24
Цитата Сообщение от PSIAlt Посмотреть сообщение
Ну тогда это был бы не строго типизированный язык.
А что не так со строгостью? Выводилка типов не должна сказать, что тип этой функции будет X → Y, где X не поддерживает умножение на число два.


Цитата Сообщение от ForEveR Посмотреть сообщение
Неверно. func не будет тем, что вы сказали. closure это совершенно отдельный тип, не указатель на функцию.
Да вроде
такое
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
#include <iostream>
 
typedef int (*func_type)(int);
 
func_type getFunc(int y)
{
  return [](int x) -> int { return 2*x; };
}
 
int main()
{
  std::cout << getFunc()(10);
}
прокатывает. Так что вполне вероятно, что лямбды — не замыкания (которые с [], а не [=] или [&]) можно по крайней мере приводить к указателям на функции. Курю стандарт пока.

Таки да. Лямбды-комбинаторы можно приводить к указателям, 5.1.2/6:
The closure type for a lambda-expression with no lambda-capture has a public non-virtual non-explicit const conversion function to pointer to function having the same parameter and return types as the closure type’s function call operator. The value returned by this conversion function shall be the address of a function that, when invoked, has the same effect as invoking the closure type’s function call operator.
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
01.09.2012, 23:18     Как объявить функцию без прототипа
Еще ссылки по теме:

Как объявить функцию, которая имеет место быть только в некоторых дочерних классах, а базовый класс абстрактный? C++
C++ Объявить массив? Запросто! Объявить массив массивов? А как это?
C++ Можно ли объявить дружественную функцию как шаблон?

Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
ForEveR
Модератор
Эксперт C++
 Аватар для ForEveR
7927 / 4709 / 318
Регистрация: 24.06.2010
Сообщений: 10,524
Завершенные тесты: 3
01.09.2012, 23:18     Как объявить функцию без прототипа #25
~OhMyGodSoLong~, Ну я и не спорил, что можно. Я спорил с тем, что auto выведет именно указатель на функцию.
Yandex
Объявления
01.09.2012, 23:18     Как объявить функцию без прототипа
Ответ Создать тему
Опции темы

Текущее время: 09:21. Часовой пояс GMT +3.
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2016, vBulletin Solutions, Inc.
Рейтинг@Mail.ru