Модераторы: Daevaorn

Поиск:

Ответ в темуСоздание новой темы Создание опроса
> Игра в С++, 7-й тайм 
V
    Опции темы
UnrealMan
Дата 31.8.2007, 12:08 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 722
Регистрация: 30.3.2006

Репутация: 27
Всего: 32



x будет передана как ссылка на функцию

Это сообщение отредактировал(а) UnrealMan - 31.8.2007, 12:12
PM MAIL   Вверх
FiMa1
Дата 31.8.2007, 12:09 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 408
Регистрация: 23.9.2006

Репутация: 5
Всего: 6



Цитата(UnrealMan @ 31.8.2007,  12:08)
будет то же самое smile

По поводу? Так не правильно дописать что ли void x(){} ?
PM   Вверх
UnrealMan
Дата 31.8.2007, 12:17 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 722
Регистрация: 30.3.2006

Репутация: 27
Всего: 32



Я, кстати, не видел в стандарте разрешения использовать указатели и ссылки на функции-эллипсисы.

Это сообщение отредактировал(а) UnrealMan - 31.8.2007, 12:21
PM MAIL   Вверх
Fazil6
Дата 31.8.2007, 12:20 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
***


Профиль
Группа: Завсегдатай
Сообщений: 1653
Регистрация: 3.5.2006
Где: Минск

Репутация: 35
Всего: 60



ну и запрета там походу тоже нет

FiMa1, специально проверил твой последний вариант.

Microsoft Visual Studio 2005
Version 8.0.50727.762  (SP.050727-7600)
Microsoft .NET Framework
Version 2.0.50727

шаблон в обоих случаях вызвался 

Это сообщение отредактировал(а) Fazil6 - 31.8.2007, 12:23
PM MAIL   Вверх
UnrealMan
Дата 31.8.2007, 12:22 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 722
Регистрация: 30.3.2006

Репутация: 27
Всего: 32



Что не разрешено, то запрещено.
PM MAIL   Вверх
FiMa1
Дата 31.8.2007, 12:23 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 408
Регистрация: 23.9.2006

Репутация: 5
Всего: 6



Цитата(UnrealMan @ 31.8.2007,  12:17)
Я, кстати, не видел в стандарте разрешения использовать указатели и ссылки на функции-эллипсисы.

Ну а тот вариант где сам x - функция?
Код
...
void x(){}

int main()
{
    f(x);
...
}

PM   Вверх
UnrealMan
Дата 31.8.2007, 12:26 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 722
Регистрация: 30.3.2006

Репутация: 27
Всего: 32



x будет передана ссылкой на функцию в шаблонную функцию
PM MAIL   Вверх
FiMa1
Дата 31.8.2007, 12:27 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 408
Регистрация: 23.9.2006

Репутация: 5
Всего: 6



Цитата(Fazil6 @ 31.8.2007,  12:20)
FiMa1, специально проверил твой последний вариант.
Microsoft Visual Studio 2005
Version 8.0.50727.762  (SP.050727-7600)
Microsoft .NET Framework
Version 2.0.50727
шаблон в обоих случаях вызвался

 smile не знаю.. перестроил проект (Empty Console Project), Microsoft Visual Studio 2005, Version 8.0.50727.42  (RTM.050727-4200), Installed Edition: Professional - то же самое (ellipsis, template)...
Но здравая логика, говорит, что компилятор возможно не прав..

Это сообщение отредактировал(а) FiMa1 - 31.8.2007, 12:43
PM   Вверх
UnrealMan
Дата 31.8.2007, 12:32 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 722
Регистрация: 30.3.2006

Репутация: 27
Всего: 32



Если стандарт никак не огововаривает поведение ссылок на функции с эллипсисами, то тут не о чем говорить. Результат может быть любой.
PM MAIL   Вверх
bns
Дата 31.8.2007, 12:38 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 7
Регистрация: 3.4.2007

Репутация: нет
Всего: нет



у меня в VS2005
Код


template <class T>
    void f(const T &t)
        { std::cout << "template" << std::endl; }
void f(...)
        { std::cout << "ellipsis" << std::endl; }
        
void (&x)(...) = f;

int main()
{
    f(x); // должно быть выведено: "ellipsis"
}



выдает ellipsis
PM MAIL   Вверх
UnrealMan
Дата 31.8.2007, 13:33 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 722
Регистрация: 30.3.2006

Репутация: 27
Всего: 32



Задачка элементарная, и у неё есть вполне стандартное решение. Вставить надо всего одну простую строчку кода. Даже короче, чем void x(){} smile

Это сообщение отредактировал(а) UnrealMan - 31.8.2007, 13:39
PM MAIL   Вверх
bsa
Дата 31.8.2007, 14:08 (ссылка) |    (голосов:2) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


Профиль
Группа: Модератор
Сообщений: 9185
Регистрация: 6.4.2006
Где: Москва, Россия

Репутация: 63
Всего: 196



Код
#include <iostream>

template <class T>
    void f(const T &t)
        { std::cout << "template" << std::endl; }

void f(...)
        { std::cout << "ellipsis" << std::endl; }

enum { x = 10};

int main()
{
    f(x); // должно быть выведено: "ellipsis"
}

PM   Вверх
FiMa1
Дата 31.8.2007, 14:11 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 408
Регистрация: 23.9.2006

Репутация: 5
Всего: 6



Цитата(bsa @ 31.8.2007,  14:08)
Код
#include <iostream>

template <class T>
    void f(const T &t)
        { std::cout << "template" << std::endl; }

void f(...)
        { std::cout << "ellipsis" << std::endl; }

enum { x = 10};

int main()
{
    f(x); // должно быть выведено: "ellipsis"
}

у меня "template" выводит  smile 
PM   Вверх
UnrealMan
Дата 31.8.2007, 14:14 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 722
Регистрация: 30.3.2006

Репутация: 27
Всего: 32



Ну наконец-то smile Всё правильно: локальные и анонимные типы в шаблонах не выводятся.

Так что такие варианты

enum {x};
enum {} x;
class {} x;

всегда будут идти мимо шаблонов

Добавлено через 1 минуту и 7 секунд
Цитата(FiMa1 @  31.8.2007,  15:11 Найти цитируемый пост)
у меня "template" выводит  

Компилятор смени. Стандарт запрещает вывод анонимных типов.
PM MAIL   Вверх
FiMa1
Дата 31.8.2007, 14:22 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 408
Регистрация: 23.9.2006

Репутация: 5
Всего: 6



Цитата(UnrealMan @ 31.8.2007,  14:14)
Компилятор смени. Стандарт запрещает вывод анонимных типов.

Мда уж.. Так же стандарту не соответствует Borland C++ Builder Enterprise Suite Version 6.0 (Build 10.157). Вариант с классом прогонял уже давно, вот ведь гады  smile 
Аналогичная ситуация и для dev-cpp v 4.9.8.0  smile 

Это сообщение отредактировал(а) FiMa1 - 31.8.2007, 14:28
PM   Вверх
Ответ в темуСоздание новой темы Создание опроса
Правила форума "С++:Общие вопросы"
Earnest Daevaorn

Добро пожаловать!

  • Черновик стандарта C++ (за октябрь 2005) можно скачать с этого сайта. Прямая ссылка на файл черновика(4.4мб).
  • Черновик стандарта C (за сентябрь 2005) можно скачать с этого сайта. Прямая ссылка на файл черновика (3.4мб).
  • Прежде чем задать вопрос, прочтите это и/или это!
  • Здесь хранится весь мировой запас ссылок на документы, связанные с C++ :)
  • Не брезгуйте пользоваться тегами [code=cpp][/code].
  • Пожалуйста, не просите написать за вас программы в этом разделе - для этого существует "Центр Помощи".
  • C++ FAQ

Если Вам понравилась атмосфера форума, заходите к нам чаще! С уважением, Earnest Daevaorn

 
1 Пользователей читают эту тему (1 Гостей и 0 Скрытых Пользователей)
0 Пользователей:
« Предыдущая тема | C/C++: Общие вопросы | Следующая тема »


 




[ Время генерации скрипта: 0.0854 ]   [ Использовано запросов: 21 ]   [ GZIP включён ]


Реклама на сайте     Информационное спонсорство

 
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности     Powered by Invision Power Board(R) 1.3 © 2003  IPS, Inc.