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

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

Восстановить пароль Регистрация
 
BigLow
55 / 55 / 2
Регистрация: 07.07.2013
Сообщений: 345
18.08.2013, 22:23     Функция "возвращает" значение #1
Почему у этой функции не указан тип возвращаемого значения?
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'
После регистрации реклама в сообщениях будет скрыта и будут доступны все возможности форума.
0x10
2426 / 1598 / 232
Регистрация: 24.11.2012
Сообщений: 3,919
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
429 / 364 / 37
Регистрация: 06.08.2012
Сообщений: 961
18.08.2013, 22:31     Функция "возвращает" значение #4
BigLow, почитай про Операторы преобразования.

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

Более формально... Не может быть двух перегруженных функций, которые отличаются только возвращаемым значением. Для операторов приведения типов это означает, что если бы они подчинялись тем же правилам, то для одного класса нельзя было бы определить более одного такого оператора.
VLK
 Аватар для VLK
192 / 161 / 12
Регистрация: 05.05.2013
Сообщений: 1,221
18.08.2013, 22:45     Функция "возвращает" значение #6
BigLow, если используется шаблон, то, что принимает то и возвращает и ни как по другому.
ForEveR
Модератор
Эксперт C++
 Аватар для ForEveR
7927 / 4709 / 318
Регистрация: 24.06.2010
Сообщений: 10,524
Завершенные тесты: 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
Эксперт С++
4848 / 2987 / 368
Регистрация: 10.11.2010
Сообщений: 11,028
Записей в блоге: 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     Функция "возвращает" значение
Еще ссылки по теме:

Функция isspace и тип string: Не существует подходящей функции преобразования из "std::string" в "int" C++
C++ Перегруженный "оператор +" неправильно возвращает значения
C++ Макрос, который принимает два значения (a, b) и возвращает строку "ab"

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

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

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