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

Поиск:

Ответ в темуСоздание новой темы Создание опроса
> Игра в С++, 4-й тайм 
:(
    Опции темы
Fazil6
Дата 13.7.2007, 20:14 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
***


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

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



Код

template<class T>
void test(T &a, T &b)
{
    printf("\nTEST 1\n");
}
//=========================
void test(char *a, char *b)
{
    printf("\nTEST 2\n");
}
//=========================
void main()
{    

    test("Июнь","Июль");
    test("Август", "Сентябрь");
}


Как Вы думаете,
что компилятор выберет для вызова.

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



****


Профиль
Группа: Участник Клуба
Сообщений: 2133
Регистрация: 23.7.2006
Где: Санкт-Петербург

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



Цитата(Fazil6 @  13.7.2007,  20:14 Найти цитируемый пост)
что компилятор выберет для вызова.

думаю, что это:
void test(char *a, char *b)
{
    printf("\nTEST 2\n");
}

тк из этого: "Июнь" ссылку не сделаешь
PM MAIL   Вверх
Daevaorn
Дата 13.7.2007, 20:28 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


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

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



Цитата(zkv @  13.7.2007,  21:26 Найти цитируемый пост)
тк из этого: "Июнь" ссылку не сделаешь 

smile
я за шаблонную!
PM MAIL WWW   Вверх
Fazil6
Дата 13.7.2007, 20:31 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
***


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

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



Цитата(zkv @  13.7.2007,  20:26 Найти цитируемый пост)
думаю, что это:


Цитата(Daevaorn @  13.7.2007,  20:28 Найти цитируемый пост)
я за шаблонную!

 smile 
вот... Это уже интереснее.... Имеем разные мнения...

Кто-нибудь еще что-нибудь предложит?
PM MAIL   Вверх
Melancholic
Дата 13.7.2007, 21:22 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



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

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



Казалось бы никак не void test(char *a, char *b). Ибо проинициализировать char* значением типа const char* нельзя. А ссылка на const char* это кажется вполне естественным.
PM MAIL   Вверх
nickless
Дата 13.7.2007, 21:22 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Гентозавр
****


Профиль
Группа: Участник Клуба
Сообщений: 2976
Регистрация: 29.8.2005
Где: Germany

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



Мдя, думал компилятор ругнётся на переобъявление функции, попробовал - не ругнулся, но результат выдал очень неожиданный... smile 
Жду решения smile 


--------------------
user posted image

Real men don't use backups, they post their stuff on a public ftp server and let the rest of the world make copies
- Linus Torvalds
PM MAIL   Вверх
Fazil6
Дата 13.7.2007, 21:26 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
***


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

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



Цитата(nickless @  13.7.2007,  21:22 Найти цитируемый пост)
но результат выдал очень неожиданный... 

а какой компиллятор? smile 

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



****


Профиль
Группа: Участник Клуба
Сообщений: 2133
Регистрация: 23.7.2006
Где: Санкт-Петербург

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



Цитата(Melancholic @  13.7.2007,  21:22 Найти цитируемый пост)
Ибо проинициализировать char* значением типа const char* нельзя.

скажешь, что это:
Код

void f( char *x )
{
}
int main()
{
    f( "очень даже компильнем :)" );
}

не откомпилится?

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


Гентозавр
****


Профиль
Группа: Участник Клуба
Сообщений: 2976
Регистрация: 29.8.2005
Где: Germany

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



Цитата(Fazil6 @  13.7.2007,  20:26 Найти цитируемый пост)
а какой компиллятор? 

gcc 4.1.2

П.С. Понял почему не ругнулся smile 




--------------------
user posted image

Real men don't use backups, they post their stuff on a public ftp server and let the rest of the world make copies
- Linus Torvalds
PM MAIL   Вверх
Melancholic
Дата 13.7.2007, 21:42 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



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

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



Цитата

не откомпилится?

Простите, сморозил. Тип строкового литерала есть const char[]
PM MAIL   Вверх
bsa
Дата 13.7.2007, 21:43 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


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

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



Ужас! Тоже хочу знать почему ТАК!!!  smile 
Никогда бы не догадался... Такие задачки надо давать тем, кому надо отказать в приеме на работу... Имхо.
PM   Вверх
Fazil6
Дата 13.7.2007, 21:49 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
***


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

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



Цитата(bsa @  13.7.2007,  21:43 Найти цитируемый пост)
Ужас! Тоже хочу знать почему ТАК!!!

ответ очень прост. 
Подумайте немного...
Полпути уже пройдено.
Какой у тебя компилятор?
PM MAIL   Вверх
nickless
Дата 13.7.2007, 22:01 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Гентозавр
****


Профиль
Группа: Участник Клуба
Сообщений: 2976
Регистрация: 29.8.2005
Где: Germany

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



Моё имхо почему:
компилятор генерит код для нормальной test()
потом встретив первый вызов test() компилятор генерит шаблонную test(const char*, const char*) и вызывает её
потом на втором вызове не генерит код шблонной ибо уже есть, и берёт первую попавшуюся функцию под именем test, т.е. test(char*, char*)


Добавлено через 1 минуту и 17 секунд
Но блин, не дай бог дебажить программу пол ночи изза этого...


--------------------
user posted image

Real men don't use backups, they post their stuff on a public ftp server and let the rest of the world make copies
- Linus Torvalds
PM MAIL   Вверх
zkv
Дата 13.7.2007, 22:05 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата



****


Профиль
Группа: Участник Клуба
Сообщений: 2133
Регистрация: 23.7.2006
Где: Санкт-Петербург

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



Цитата(nickless @  13.7.2007,  22:01 Найти цитируемый пост)
потом на втором вызове не генерит код шблонной ибо уже есть, и берёт первую попавшуюся функцию под именем test, т.е. test(char*, char*) 

попробуй:
#include <iostream>
template<class T>
void test(T &a, T &b)
{
    std::cout << typeid( a ).name()<<"\t";

    printf("TEST 1\n\n");
}
//=========================
void test(char *a, char *b)
{
    std::cout << typeid( a ).name()<<"\t";

    printf("TEST 2\n\n");
}
//=========================

void main()
{    
    test("Июнь","Июль");
    test("Август", "Сентябрь");
    test("Июнь1","Июль");
    test("Авгу", "Сент");
    std::cin.get();
}

PM MAIL   Вверх
Fazil6
Дата 13.7.2007, 22:09 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
***


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

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



nickless, 
 smile интересная теория, но неправильная.  
PM MAIL   Вверх
Ответ в темуСоздание новой темы Создание опроса
Правила форума "С++:Общие вопросы"
Earnest Daevaorn

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

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

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

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


 




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


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

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