![]() |
Модераторы: Daevaorn |
![]() ![]() ![]() |
|
JackYF |
|
|||
![]() полуавантюрист ![]() ![]() ![]() ![]() Профиль Группа: Участник Сообщений: 5814 Регистрация: 28.8.2004 Где: страна тысячи озё р Репутация: 18 Всего: 162 |
Как именно ты еще при этом вызываешь? С явным преобразованием или без? |
|||
|
||||
Anikmar |
|
|||
![]() Эксперт ![]() ![]() ![]() ![]() Профиль Группа: Завсегдатай Сообщений: 2513 Регистрация: 26.11.2006 Где: Санкт-Петербург Репутация: 9 Всего: 59 |
Вызываю Func(1) - без явного, как и требовалось в примере
|
|||
|
||||
JackYF |
|
|||
![]() полуавантюрист ![]() ![]() ![]() ![]() Профиль Группа: Участник Сообщений: 5814 Регистрация: 28.8.2004 Где: страна тысячи озё р Репутация: 18 Всего: 162 |
Anikmar, тогда можно локально поздравить Билдер
![]() |
|||
|
||||
UnrealMan |
|
||||
Опытный ![]() ![]() Профиль Группа: Участник Сообщений: 722 Регистрация: 30.3.2006 Репутация: 27 Всего: 32 |
Насчёт gcc я хотел бы посмотреть примерчики (мне пока только пару багов удалось обнаружить, не считая отсутствия поддержки экспорта шаблонов :-) ). В метапрограммировании подобный код используется в порядке вещей :-) А, ну тогда предупреждение в случае без перегрузки в общем-то сойдёт :-) Кстати, чего Builder (какой он у тебя версии?) выведет вот тут?
Это сообщение отредактировал(а) UnrealMan - 12.12.2006, 19:17 |
||||
|
|||||
JackYF |
|
|||
![]() полуавантюрист ![]() ![]() ![]() ![]() Профиль Группа: Участник Сообщений: 5814 Регистрация: 28.8.2004 Где: страна тысячи озё р Репутация: 18 Всего: 162 |
Как тебе строчки:
|
|||
|
||||
Anikmar |
|
|||
![]() Эксперт ![]() ![]() ![]() ![]() Профиль Группа: Завсегдатай Сообщений: 2513 Регистрация: 26.11.2006 Где: Санкт-Петербург Репутация: 9 Всего: 59 |
На предложенный код, мой Билдер (6 версия) показал следующее:
enum En { en_zero = 0, en_two = 2 }; const int i_zero = en_zero; void Func1(...) { cout<<"Func1(...)"<<endl; } void Func1(bool) { cout<<"Func1(bool)"<<endl; } void Func2(...) { cout<<"Func2(...)"<<endl; } void Func2(int *) { cout<<"Func2(int *)"<<endl; } int main() { En en = en_two; Func1(en); // Вызывается (bool) Func2(en_zero); // Вызывается (int*) Func2(en_zero*1); // Вызывается (...) Func2(en_zero*0); // Вызывается (...) Func2(i_zero); // Вызывается (...) } Касаемо стандартов и нарушений стандартов - лично я считаю, что явного нарушения стандарта в том, что неявное преобразование целого к нумератору не вызывает именно ошибки, а только предупреждение - оправдано. Думаю это связано с архитектурой визуального программирования - очень много свойств хранится в виде int, а грузится в свойства типа "нумератор" - если бы там были ошибки, то сложно было расширять систему (лично мое мнение). А по поводу расширения стандарта - никакой боле-менее серьезный (а особенно красивый) проект не будет компилироваться в разных средах просто так - все равно поработать с ним придется. Если человек пишет достаточно большую систему на VC ну никак он ее не перенесет на Builder просто так на уровне исходников. Либо он не должен пользоваться практически никакими прелестями VC На чистом стандарте можно писать небольшие модули с узкоспециализированными задачами (например, сложную математику). Как только лезешь в украшательства проекта (а это сейчас не последнее место заниемает в программерстве) то волей неволей начинаешь пользоваться расширениями стандарта, которые имеются у конкретного компилятора. Не берусь судить - нормально это или нет, но принять как данность придется... |
|||
|
||||
UnrealMan |
|
||||||
Опытный ![]() ![]() Профиль Группа: Участник Сообщений: 722 Регистрация: 30.3.2006 Репутация: 27 Всего: 32 |
Главное, чтоб корректно написанная на чистом C++ программа работала так, как предписывает ей работать стандарт. Если это не выполняется, то компилятор однозначно плох (насколько – зависит от характера и количества расхождений). Ну а расширения, делающие из некорректно составленной (с т.з. чистого C++) программы корректную (для данного компилятора) – эт, в принципе, вещь допустимая. Хотя я сомневаюсь, что вот такая некорректно составленная программа
в MinGW работает благодаря какому-то целенаправленно созданному расширению, учитывая что следующая программа
уже не компилируется :-) А, ну да, чего-то такое припоминаю :-) У такого объекта ещё тип какой-то странный, и для него typeid неприменим. Ты точно ничего не перепутал? :-)) Должно быть:
|
||||||
|
|||||||
Anikmar |
|
|||
![]() Эксперт ![]() ![]() ![]() ![]() Профиль Группа: Завсегдатай Сообщений: 2513 Регистрация: 26.11.2006 Где: Санкт-Петербург Репутация: 9 Всего: 59 |
Нет, ничего не перепутал - у меня выдало так
|
|||
|
||||
UnrealMan |
|
|||
Опытный ![]() ![]() Профиль Группа: Участник Сообщений: 722 Регистрация: 30.3.2006 Репутация: 27 Всего: 32 |
||||
|
||||
![]() ![]() ![]() |
Правила форума "С++:Общие вопросы" | |
|
Добро пожаловать!
Если Вам понравилась атмосфера форума, заходите к нам чаще! С уважением, Earnest Daevaorn |
1 Пользователей читают эту тему (1 Гостей и 0 Скрытых Пользователей) | |
0 Пользователей: | |
« Предыдущая тема | C/C++: Общие вопросы | Следующая тема » |
|
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности Powered by Invision Power Board(R) 1.3 © 2003 IPS, Inc. |