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

Поиск:

Ответ в темуСоздание новой темы Создание опроса
> Приведения в стиле C++, а зачем, если есть приведения в стиле C? 
:(
    Опции темы
saneea
Дата 23.1.2010, 16:41 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Бывалый
*


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

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



На собеседовании задали вопрос: "Зачем было придумывать приведения в стиле C++, если были приведения в стиле C?". Я знаю, что делает каждый из четырёх cast'ов. Но какую выгоду они дают по сравнению с приведениями в стиле C? (dynamic_cast - исключение, т.к. его аналога в C++ не было). У Страуструпа написано, что "новый стиль более ясно выражает намерения программиста"... неужели только в этом выгода?
PM MAIL   Вверх
zim22
Дата 23.1.2010, 16:56 (ссылка) |    (голосов:1) Загрузка ... Загрузка ... Быстрая цитата Цитата


depict1
****


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

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



Цитата(saneea @  23.1.2010,  15:41 Найти цитируемый пост)
неужели только в этом выгода?

приведение означает обычно, что программист хитрит и код не является "чистым". и находить все места приведения в проекте гораздо легче, делая поиск по словам static_cast и т.д., чем пытаться найти приведения в стиле Си.
***
кстати, есть ещё один вид каста: function-style cast
Код

double d = 33.44;
int res = int(d); // function-style
int res = (int)d; // C-style



Это сообщение отредактировал(а) zim22 - 23.1.2010, 17:13


--------------------
PM MAIL   Вверх
saneea
Дата 23.1.2010, 17:19 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Бывалый
*


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

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



Цитата

находить все места приведения в проекте гораздо легче, делая поиск по словам static_cast и т.д., чем пытаться найти приведения в стиле Си

ну вот так я и ответил, но по их (интервьюверов) выражению лица было понятно, что это не главная выгода.
PM MAIL   Вверх
zim22
Дата 23.1.2010, 17:32 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


depict1
****


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

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



Цитата(saneea @  23.1.2010,  16:19 Найти цитируемый пост)
ну вот так я и ответил, но по их (интервьюверов) выражению лица было понятно, что это не главная выгода.

погоди, а за дыханием интервьювера ты следил? невербальные признаки нужно отслеживать тщательно. руки скрещены у него были? жевачку он жевал? smile
***
это я к тому, что врядли он задал тебе этот один единственный вопрос. проблема либо в тебе, либо в интервьювере. полезней для психики будет, если будешь думать, что в интервьювере smile


--------------------
PM MAIL   Вверх
kemiisto
  Дата 23.1.2010, 17:37 (ссылка) |    (голосов:2) Загрузка ... Загрузка ... Быстрая цитата Цитата


Дикий Кот. =^.^=
****
Награды: 1



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

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



saneea, к тому, что сказал zim22, можно добавить, что операторов приведения в стиле С++ целых четыре и каждый имеет своё назначение. Компилятору легче диагностировать ошибки некорректного приведения. По-моему у Мэйерса это было...

Добавлено через 3 минуты и 4 секунды
О, нашёл! Ну да, почти процитировал:
Цитата
The old-style casts continue to be legal, but the new forms are preferable. First, they're much easier to identify in code (both for humans and for tools like grep), thus simplifying the process of finding places in the code where the type system is being subverted. Second, the more narrowly specified purpose of each cast makes it possible for compilers to diagnose usage errors. For example, if you try to cast away constness using a new-style cast other than const_cast, your code won't compile.

Effective C++ Third Edition. Item 27: Minimize casting.



--------------------
PM MAIL WWW GTalk Jabber   Вверх
Dem_max
Дата 23.1.2010, 18:10 (ссылка)    | (голосов:6) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
***


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

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



Цитата

Компилятору легче диагностировать ошибки некорректного приведения.

Ага легче диагностировать глупые ошибки. Лучше б эти люди совсем программированием не занимались.


--------------------
Американские программисты долго не могли понять, почему русские при зависании Windоws всё время повторяют "Твой зайка написал" ("Yоur bunnу wrоte")
PM MAIL   Вверх
saneea
Дата 23.1.2010, 18:34 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Бывалый
*


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

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



Цитата

это я к тому, что врядли он задал тебе этот один единственный вопрос. проблема либо в тебе, либо в интервьювере. полезней для психики будет, если будешь думать, что в интервьювере


zim22, чтоб внести ясность, собеседование длилось около 4 с половиной часов. За это время были разные вопросы, разные ответы, и разные реакции на ответы. И когда я говорю "по их (интервьюверов) выражению лица было понятно, что это не главная выгода", то это значит, что я говорю, о конкретном вопросе (в данном случае про приведения). Так что не стоит превращать эту тему в сериал "Lie to me".

Добавлено через 4 минуты и 21 секунду
Цитата(kemiisto @ 23.1.2010,  17:37)
saneea, к тому, что сказал zim22, можно добавить, что операторов приведения в стиле С++ целых четыре и каждый имеет своё назначение. Компилятору легче диагностировать ошибки некорректного приведения. По-моему у Мэйерса это было...

Добавлено @ 17:40
О, нашёл! Ну да, почти процитировал:
Цитата
The old-style casts continue to be legal, but the new forms are preferable. First, they're much easier to identify in code (both for humans and for tools like grep), thus simplifying the process of finding places in the code where the type system is being subverted. Second, the more narrowly specified purpose of each cast makes it possible for compilers to diagnose usage errors. For example, if you try to cast away constness using a new-style cast other than const_cast, your code won't compile.

Effective C++ Third Edition. Item 27: Minimize casting.

Почитал Майерса. Видать приведения в стиле C++ по большей степени расчитаны на "безболезненную" работу с множественным наследованием.
PM MAIL   Вверх
mes
Дата 23.1.2010, 19:50 (ссылка) |    (голосов:1) Загрузка ... Загрузка ... Быстрая цитата Цитата


любитель
****


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

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



Цитата(zim22 @  23.1.2010,  16:32 Найти цитируемый пост)
погоди, а за дыханием интервьювера ты следил? 

зря так иронично.. "Слежение за дыханием" позволяет очень часто найти то, что от тебя требуется.

Цитата(saneea @  23.1.2010,  17:34 Найти цитируемый пост)
по большей степени расчитаны на "безболезненную" работу с множественным наследованием.

вот пример для одиночного 
Код


struct A { void f() { std::cout << 'A'; } };
struct B { void f() { std::cout << 'B'; } };
struct C : A  { void f() { std::cout << 'C'; } };

int main ()
{
   A a;
  
   ((B&)a).f();
// static_cast<B&>(a).f(); // ERROR
   reinterpret_cast<B&>(a).f();

   ((C&)a).f();  
   static_cast<C&>(a).f();


имхо, суть в том что в С-стиле компилятор сам решает какой из преобразований выбрать, и может делать не то что желательно для программиста.
В С++-стиле программист явно (прозрачнее) выражает цели.




--------------------
PM MAIL WWW   Вверх
saneea
Дата 24.1.2010, 14:34 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Бывалый
*


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

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



mes, спасибо! Пример убедительный.
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.0775 ]   [ Использовано запросов: 22 ]   [ GZIP включён ]


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

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