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

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

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

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

18.08.2013, 22:23. Просмотров 531. Ответов 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'
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
18.08.2013, 22:23     Функция "возвращает" значение
Посмотрите здесь:

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

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

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

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

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

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

После регистрации реклама в сообщениях будет скрыта и будут доступны все возможности форума.
0x10
2459 / 1631 / 238
Регистрация: 24.11.2012
Сообщений: 4,012
18.08.2013, 22:23     Функция "возвращает" значение #2
А что оператор приведения к типу T может вернуть кроме T?
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); }
Да только ошибка
Issues
430 / 365 / 37
Регистрация: 06.08.2012
Сообщений: 961
18.08.2013, 22:31     Функция "возвращает" значение #4
BigLow, почитай про Операторы преобразования.

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

Более формально... Не может быть двух перегруженных функций, которые отличаются только возвращаемым значением. Для операторов приведения типов это означает, что если бы они подчинялись тем же правилам, то для одного класса нельзя было бы определить более одного такого оператора.
VLK
193 / 162 / 12
Регистрация: 05.05.2013
Сообщений: 1,225
18.08.2013, 22:45     Функция "возвращает" значение #6
BigLow, если используется шаблон, то, что принимает то и возвращает и ни как по другому.
ForEveR
В астрале
Эксперт С++
7970 / 4732 / 320
Регистрация: 24.06.2010
Сообщений: 10,541
Завершенные тесты: 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”
castaway
Эксперт С++
4881 / 3017 / 370
Регистрация: 10.11.2010
Сообщений: 11,076
Записей в блоге: 10
Завершенные тесты: 1
18.08.2013, 22:51     Функция "возвращает" значение #8
Цитата Сообщение от VLK Посмотреть сообщение
BigLow, если используется шаблон, то, что принимает то и возвращает и ни как по другому.
Ну как же. Что мешает шаблонной функции вернуть, скажем.. значение int, если в качестве шаблонного аргумента указан, скажем... float ?
BigLow
55 / 55 / 2
Регистрация: 07.07.2013
Сообщений: 345
18.08.2013, 22:52  [ТС]     Функция "возвращает" значение #9
уже немного доходит до меня ) Просто необычно все это. Внутри функции есть слово return, но типа возвращаемого значения нет!
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
18.08.2013, 22:59     Функция "возвращает" значение
Еще ссылки по теме:

Макрос, который принимает два значения (a, b) и возвращает строку "ab" - C++
Помогите с макросом. Он должен принимать два значения (a, b) и возвращать строку &quot;ab&quot;

IlLoadImage возвращает ошибку, что указанный файл не найден. "IL_COULD_NOT_OPEN_FILE" - C++
Здравствуйте, в общем есть функция ilLoadImage(const wchar_t *FileName) из библиотеки DevIL (OpenIL). Функция эта принимает путь к...

Перегруженный "оператор +" неправильно возвращает значения - C++
В классе Polynom class Polynom { private: public: void correction_degree(); //функция корректировки степени + unsigned...

МАССИВЫ: динамические мас.значение типа "int *" нельзя присвоить сущности типа "int" - C++
МАССИВЫ: динамические массива ОШИБКА:значение типа &quot;int *&quot; нельзя присвоить сущности типа &quot;int&quot; #include &lt;iostream&gt; using...


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

Или воспользуйтесь поиском по форуму:
castaway
Эксперт С++
4881 / 3017 / 370
Регистрация: 10.11.2010
Сообщений: 11,076
Записей в блоге: 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;
}
Yandex
Объявления
18.08.2013, 22:59     Функция "возвращает" значение
Ответ Создать тему
Опции темы

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