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

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

Войти
Регистрация
Восстановить пароль
 
BigLow
55 / 55 / 2
Регистрация: 07.07.2013
Сообщений: 345
#1

Функция "возвращает" значение - C++

18.08.2013, 22:23. Просмотров 578. Ответов 9
Метки нет (Все метки)

Почему у этой функции не указан тип возвращаемого значения?
C++
1
template <class T> operator T () {  return *((T *)m_p); }

C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
class any {
    void *  m_p;
 
public:
    template <class T> any( T value ) : m_p( (void *)(new T ( value )) ) {}
    template <class T> operator T () {  return *((T *)m_p); }
    ~any() { /* ... */ }
};
 
int main()
{
    any c = 'c';
    any i = 1234567890;
 
    std::cout << (char)c << std::endl;
    std::cout << (int)i << std::endl;
}
Добавлено через 1 минуту
а если указать возвращаемый тип вот таким способом:
C++
1
2
    template<typename T>
    T operator T()  { return *((T *)mValue); }
то появляется ошибка
error: return type specified for 'operator T'
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
18.08.2013, 22:23
Здравствуйте! Я подобрал для вас темы с ответами на вопрос Функция "возвращает" значение (C++):

Ввести данные структуры, и если на входе пустая строка, функция возвращает "ноль" (Прокомментировать каждую строку) - C++
Друзья, прокоментируйте пожалуйста, что каждая строка делает, что за переменные и т.д. задание такое было: написать функцию, которая...

Функция возвращает "-1.#IND" - C++
Прогал задачку по вычматам, на выходе получаю символ &quot;-1.#IND&quot;. Вроде, это бесконечность. Подскажите, пожалуйста, в чем ошибка? Прога...

Что значит "возвращает" значение - C++
Что значит &quot;возвращает значение&quot;? Вот есть function() { int variable = 5; ...//преобразования переменной variable ...

В зависимости от времени года "весна", "лето", "осень", "зима" определить погоду "тепло", "жарко", "холодно", "очень холодно" - C++
В зависимости от времени года &quot;весна&quot;, &quot;лето&quot;, &quot;осень&quot;, &quot;зима&quot; определить погоду &quot;тепло&quot;, &quot;жарко&quot;, &quot;холодно&quot;, &quot;очень холодно&quot;. Я так...

Исправить ошибку error C2562: функция типа "void", возвращающая значение - C++
Выдает ошибку error C2562: tabl: функция типа &quot;void&quot;, возвращающая значение. #include &lt;iostream&gt; #include &lt;math.h&gt; #include &lt;iomanip&gt;...

Функции, ошибка C2562: tabl: функция типа "void", возвращающая значение - C++
Выдает ошибку error C2562: tabl: функция типа &quot;void&quot;, возвращающая значение. #include &lt;iostream&gt; #include &lt;math.h&gt; #include &lt;iomanip&gt;...

9
0x10
2479 / 1652 / 248
Регистрация: 24.11.2012
Сообщений: 4,095
18.08.2013, 22:23 #2
А что оператор приведения к типу T может вернуть кроме T?
0
BigLow
55 / 55 / 2
Регистрация: 07.07.2013
Сообщений: 345
18.08.2013, 22:28  [ТС] #3
Цитата Сообщение от 0x10 Посмотреть сообщение
А что оператор приведения к типу T может вернуть кроме T?
все равно не понятно

Добавлено через 1 минуту
Вернет T
C++
1
2
    template<typename T>
    T operator T()  { return *((T *)mValue); }
Да только ошибка
0
Issues
430 / 365 / 37
Регистрация: 06.08.2012
Сообщений: 961
18.08.2013, 22:31 #4
BigLow, почитай про Операторы преобразования.

Добавлено через 2 минуты
http://www.c-cpp.ru/books/sozdanie-funkciy-preobrazovaniya-tipov
2
0x10
2479 / 1652 / 248
Регистрация: 24.11.2012
Сообщений: 4,095
18.08.2013, 22:31 #5
BigLow, operator T() всегда вернет T. Следовательно, явно указывать тип возвращаемого значения - избыточно. Было бы странно, если бы operator T() вернул U.

Более формально... Не может быть двух перегруженных функций, которые отличаются только возвращаемым значением. Для операторов приведения типов это означает, что если бы они подчинялись тем же правилам, то для одного класса нельзя было бы определить более одного такого оператора.
1
VLK
194 / 163 / 12
Регистрация: 05.05.2013
Сообщений: 1,225
18.08.2013, 22:45 #6
BigLow, если используется шаблон, то, что принимает то и возвращает и ни как по другому.
1
ForEveR
В астрале
Эксперт С++
7983 / 4742 / 321
Регистрация: 24.06.2010
Сообщений: 10,544
Завершенные тесты: 3
18.08.2013, 22:48 #7
Это отдельный случай. 12.3.2/1
A member function of a class X having no parameters with a name of the form
Код
conversion-function-id:
operator conversion-type-id
conversion-type-id:
type-specifier-seq conversion-declaratoropt
conversion-declarator:
ptr-operator conversion-declaratoropt
specifies a conversion from X to the type specified by the conversion-type-id. Such functions are called
conversion functions. No return type can be specified. If a conversion function is a member function, the
type of the conversion function (8.3.5) is “function taking no parameter returning conversion-type-id”
2
castaway
Эксперт С++
4915 / 3023 / 370
Регистрация: 10.11.2010
Сообщений: 11,080
Записей в блоге: 10
Завершенные тесты: 1
18.08.2013, 22:51 #8
Цитата Сообщение от VLK Посмотреть сообщение
BigLow, если используется шаблон, то, что принимает то и возвращает и ни как по другому.
Ну как же. Что мешает шаблонной функции вернуть, скажем.. значение int, если в качестве шаблонного аргумента указан, скажем... float ?
0
BigLow
55 / 55 / 2
Регистрация: 07.07.2013
Сообщений: 345
18.08.2013, 22:52  [ТС] #9
уже немного доходит до меня ) Просто необычно все это. Внутри функции есть слово return, но типа возвращаемого значения нет!
0
castaway
Эксперт С++
4915 / 3023 / 370
Регистрация: 10.11.2010
Сообщений: 11,080
Записей в блоге: 10
Завершенные тесты: 1
18.08.2013, 22:59 #10
Цитата Сообщение от VLK Посмотреть сообщение
BigLow, если используется шаблон, то, что принимает то и возвращает и ни как по другому.
C++
1
2
3
4
5
6
7
8
9
10
#include <iostream>
 
template <typename T> int test( T value ) {
    return (int)value;
}
 
int main()
{
    std::cout << test <float> ( 123.456f ) << std::endl;
}
0
18.08.2013, 22:59
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
18.08.2013, 22:59
Привет! Вот еще темы с ответами:

Почему не работает функция std::regex_replace(temp,"amp;",""); - C++
Пробую вызывать функцию std::regex_replace(temp,&quot;amp;&quot;,&quot;&quot;); Пишет ошибку: test_ok_ruDlg.cpp 1&gt;d:\visual studio...

Реализовать классы "Воин", "Пехотинец", "Винтовка", "Матрос", "Кортик" (наследование) - C++
Разработать программу с использованием наследования классов, реализующую классы: − воин; − пехотинец(винтовка); − матрос(кортик). ...

Расставить между числами знаки "+" и "-" так, чтобы значение выражение стало равно S - C++
Даны N целых чисел X1, X2, ..., XN. Расставить между ними знаки &quot;+&quot; и &quot;-&quot; так, чтобы значение получившегося выражения было равно заданному...

C4800 принудительно задано логическое значение "true" или "false" - C++
char* numalphabet = &quot;0,1,2,3,4,5,6,7,8,9&quot;; string InText(&quot;&quot;); char character = Convert::ToChar(InText); if...


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

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

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