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

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

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

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

18.08.2013, 22:23. Просмотров 504. Ответов 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     Функция "возвращает" значение
Посмотрите здесь:

Функция возвращает "-1.#IND" C++
C++ Как убрать привилегии системы? Почему GetUserName всегда возвращает "SYSTEM"?
C++ Ввести данные структуры, и если на входе пустая строка, функция возвращает "ноль" (Прокомментировать каждую строку)
C++ значение типа "char *" нельзя присвоить сущности типа "LPWSTR"
Что значит "возвращает" значение C++
C++ Функция не возвращает значение
C++ Перегруженный "оператор +" неправильно возвращает значения
После регистрации реклама в сообщениях будет скрыта и будут доступны все возможности форума.
0x10
2449 / 1621 / 238
Регистрация: 24.11.2012
Сообщений: 3,991
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
2449 / 1621 / 238
Регистрация: 24.11.2012
Сообщений: 3,991
18.08.2013, 22:31     Функция "возвращает" значение #5
BigLow, operator T() всегда вернет T. Следовательно, явно указывать тип возвращаемого значения - избыточно. Было бы странно, если бы operator T() вернул U.

Более формально... Не может быть двух перегруженных функций, которые отличаются только возвращаемым значением. Для операторов приведения типов это означает, что если бы они подчинялись тем же правилам, то для одного класса нельзя было бы определить более одного такого оператора.
VLK
 Аватар для VLK
192 / 161 / 12
Регистрация: 05.05.2013
Сообщений: 1,222
18.08.2013, 22:45     Функция "возвращает" значение #6
BigLow, если используется шаблон, то, что принимает то и возвращает и ни как по другому.
ForEveR
Модератор
Эксперт С++
 Аватар для ForEveR
7958 / 4720 / 319
Регистрация: 24.06.2010
Сообщений: 10,525
Завершенные тесты: 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
Эксперт С++
4870 / 3009 / 370
Регистрация: 10.11.2010
Сообщений: 11,059
Записей в блоге: 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     Функция "возвращает" значение
Еще ссылки по теме:

C++ Макрос, который принимает два значения (a, b) и возвращает строку "ab"
Функции, ошибка C2562: tabl: функция типа "void", возвращающая значение C++
Исправить ошибку error C2562: функция типа "void", возвращающая значение C++
IlLoadImage возвращает ошибку, что указанный файл не найден. "IL_COULD_NOT_OPEN_FILE" C++
Значение типа "char *" нельзя присвоить сущности типа "LPWSTR" C++

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

Или воспользуйтесь поиском по форуму:
castaway
Эксперт С++
4870 / 3009 / 370
Регистрация: 10.11.2010
Сообщений: 11,059
Записей в блоге: 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     Функция "возвращает" значение
Ответ Создать тему
Опции темы

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