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

С++ для начинающих

Войти
Регистрация
Восстановить пароль
 
 
Рейтинг: Рейтинг темы: голосов - 14, средняя оценка - 5.00
bgm313
12 / 12 / 2
Регистрация: 27.07.2012
Сообщений: 208
#1

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

01.09.2012, 20:15. Просмотров 1804. Ответов 24
Метки нет (Все метки)

Во всех учебниках пишут, что каждая функция должна иметь прототип. ВОт стало интересно, можно ли объявить функцию, которая не имеет прототип. Если да, то как? Покажите.
0
Лучшие ответы (1)
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
01.09.2012, 20:15
Здравствуйте! Я подобрал для вас темы с ответами на вопрос Как объявить функцию без прототипа (C++):

Как объявить friend функцию класса - C++
как это оформить, чтобы работало // ----------> one.h #include "two.h" #ifndef ONE_H_INCLUDED #define ONE_H_INCLUDED #include...

Забыл, как объявить функцию с тем же названием? - C++
Забыл, как объявить ещё одну функцию с тем же названием?

Можно ли объявить дружественную функцию как шаблон? - C++
Так всё работает: template<class T> class random { /*всячина*/ public: friend void function(random<int>&); ...

как мне в функции main() объявить функцию Do (), подскажите пожалуйста, на таком глупом застрял - C++
#include <iostream> #include <string> #include <conio.h> #include <clocale> #include <math.h> using namespace std; class Tem; ...

Как объявить функцию, которая имеет место быть только в некоторых дочерних классах, а базовый класс абстрактный? - C++
Как объявить функцию, которая имеет место быть только в некоторых дочерних классах? Например //Абстрактный базовый класс ...

Объявить функцию в STRUCT {} С++ - C++
Доброй ночи Создаю меню в консоле Задумка такая - для каждого пункта меню запускать свою функцию Как функцию объявить в структуре...

24
OhMyGodSoLong
~ Эврика! ~
1244 / 993 / 42
Регистрация: 24.07.2012
Сообщений: 2,002
01.09.2012, 21:21 #16
Цитата Сообщение от PSIAlt Посмотреть сообщение
Ну почему же, ты же можешь написать
C++
1
auto func = [](int x) -> int { return x+5; };
Соттветвенно тип func автоматом определится как int (*func)(int x)
Я имею в виду вывести. Чтобы вообще не писать кусок (int x) -> int, в котором прописаны типы аргументов и возвращаемого значения. Исключительно по телу функции.
1
ForEveR
В астрале
Эксперт С++
7983 / 4742 / 321
Регистрация: 24.06.2010
Сообщений: 10,547
Завершенные тесты: 3
01.09.2012, 21:22 #17
Цитата Сообщение от PSIAlt Посмотреть сообщение
Ну почему же, ты же можешь написать
C++
1
auto func = [](int x) -> int { return x+5; };
Соттветвенно тип func автоматом определится как int (*func)(int x)
Аналогично можно скопировать тип переменной не зная его, например так:
C++
1
2
int a=5;
decltype(a) b=7;
Неверно. func не будет тем, что вы сказали. closure это совершенно отдельный тип, не указатель на функцию.

The type of the lambda-expression (which is also the type of the closure object) is a unique, unnamed nonunion
class type — called the closure type
0
bgm313
12 / 12 / 2
Регистрация: 27.07.2012
Сообщений: 208
01.09.2012, 21:25  [ТС] #18
auto func = [](int x) -> int { return x+5; };

Если можно пояснить что это за конструкция или сказать что почитать?
0
alsav22
5428 / 4823 / 442
Регистрация: 04.06.2011
Сообщений: 13,587
01.09.2012, 21:27 #19
Цитата Сообщение от bgm313 Посмотреть сообщение
можно ли объявить функцию, которая не имеет прототип
Прототип и есть объявление. Можно ли объявить не объявляя?
0
ForEveR
В астрале
Эксперт С++
7983 / 4742 / 321
Регистрация: 24.06.2010
Сообщений: 10,547
Завершенные тесты: 3
01.09.2012, 21:27 #20
bgm313, Лямбда функция. С++11. Почитать в стандарте С++11 или у Саттера или в книге по С++11.

Вкратце: http://ru.wikipedia.org/wiki/C%2B%2B...BD.D0.B8.D1.8F
0
ValeryLaptev
Эксперт С++
1046 / 825 / 48
Регистрация: 30.04.2011
Сообщений: 1,659
01.09.2012, 21:28 #21
Цитата Сообщение от bgm313 Посмотреть сообщение
auto func = [](int x) -> int { return x+5; };

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

Цитата Сообщение от ForEveR Посмотреть сообщение
Неверно. func не будет тем, что вы сказали. closure это совершенно отдельный тип, не указатель на функцию.
okay
0
OhMyGodSoLong
~ Эврика! ~
1244 / 993 / 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.
0
ForEveR
В астрале
Эксперт С++
7983 / 4742 / 321
Регистрация: 24.06.2010
Сообщений: 10,547
Завершенные тесты: 3
01.09.2012, 23:18 #25
~OhMyGodSoLong~, Ну я и не спорил, что можно. Я спорил с тем, что auto выведет именно указатель на функцию.
0
01.09.2012, 23:18
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
01.09.2012, 23:18
Привет! Вот еще темы с ответами:

Объявить массив? Запросто! Объявить массив массивов? А как это? - C++
Доброго времени суток! Конечно, все знают, как объявить массив! int main () { int array; }

необходимо объявить массив указателей на функцию - C++
которая (например) ничё не принимает и возвращает, допустим, значение типа int. Спасибо, кто откликнется.

Можно ли объявить два указателя на одну функцию? - C++
есть функция Send(uint type, char*data); но иногда второй аргумент const char*. можно ли сделать так чтобы на одну функцию Send указывали...

Вычислить гипотенузы используя функцию, объявить прототип - C++
Описать функцию расчета длины гипотенузы треугольника, в которую передаются длины двух катетов. С помощью этой функции вычислить гипотенузы...


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

Или воспользуйтесь поиском по форуму:
25
Ответ Создать тему
Опции темы

КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2017, vBulletin Solutions, Inc.