Занимательный C++
От: Старостин Василий Викторович Россия https://starostin.msk.ru
Дата: 19.03.11 14:03
Оценка: 306 (14) +2 -10 :))) :))) :)
Статья:
Занимательный C++
Автор(ы): Старостин Василий Викторович
Дата: 19.03.2011
Несколько веселых и интересных примеров на языке C++.


Авторы:
Старостин Василий Викторович

Аннотация:
Несколько веселых и интересных примеров на языке C++.
Проект Ребенок8020 — пошаговый гайд как сделать, вырастить и воспитать ребенка.
Re: Занимательный C++
От: nen777w  
Дата: 19.03.11 21:41
Оценка:
class A 
{   
public:
  A()                    { printf("default\n"); }
  A(long)                { printf("long\n"); }
  explicit A(int)        { printf("int\n"); }
  A(const A&)            { printf("copy\n"); }
  A &operator=(const A&) { printf("op=\n"); } // ??? 
  A &operator=(const A&) { printf("op=\n"); return *this; }
};
Re: Занимательный C++
От: Alexey_VL  
Дата: 20.03.11 06:48
Оценка: +1
Здравствуйте, Старостин Василий Викторович,
int main()
{
   const int i = 0;
   prn(1); A a1();
   prn(2); A a2 = i;
   prn(3); A a3(i);
   prn(4); A a4 = A(i);
   prn(5); A a5 = (A) i;
   prn(6); A a6 = static_cast<A>(i);
   return 0;
}


В четвертом случае может вызваться конструктор копирования. Насколько помню по стандарту в таком случае разрешается как создавать временный объект, а потом копировать его, так и создавать нужный объект сразу на месте размещения.
Мафиозная диктатура это нестабильность. Если не мафиозная диктатура, то Конституция и демократия.
Re: Занимательный C++
От: Pavel Dvorkin Россия  
Дата: 20.03.11 07:03
Оценка: 21 (4) +16 :))) :))) :))
Здравствуйте, Старостин Василий Викторович, Вы писали:

СВВ>Аннотация:

СВВ>Несколько веселых и интересных примеров на языке C++.

Единственное, что в этих примерах занимательного — это детское удивление автора, впервые открывшего для себя язык С++, и спешащего поведать о своем удивлении всему миру.
With best regards
Pavel Dvorkin
Re[2]: ы
От: о_О
Дата: 20.03.11 08:37
Оценка:
Здравствуйте, Pavel Dvorkin, Вы писали:

PD>Здравствуйте, Старостин Василий Викторович, Вы писали:


СВВ>>Аннотация:

СВВ>>Несколько веселых и интересных примеров на языке C++.

PD>Единственное, что в этих примерах занимательного — это детское удивление автора, впервые открывшего для себя язык С++, и спешащего поведать о своем удивлении всему миру.


говорит человек, спешащий поведать о своем детском удивлении всему миру
Автор: Pavel Dvorkin
Дата: 19.03.11
Re: Занимательный C++
От: enji  
Дата: 20.03.11 10:00
Оценка:
Здравствуйте, Старостин Василий Викторович, Вы писали:

А почему

int i = 5;
int j = i++ + ++i;


j может быть от 10 до 14?

Пусть первым выполнится i++, тогда получим 6 + 6 = 12
Пусть первым выполнится ++i, тогда получим 7 + 6 = 13

Как получить 10, 11 и 14?
Re[2]: Занимательный C++
От: jyuyjiyuijyu  
Дата: 20.03.11 10:01
Оценка: 67 (5) -1
Здравствуйте, Pavel Dvorkin, Вы писали:

PD>Здравствуйте, Старостин Василий Викторович, Вы писали:


СВВ>>Аннотация:

СВВ>>Несколько веселых и интересных примеров на языке C++.

PD>Единственное, что в этих примерах занимательного — это детское удивление автора, впервые открывшего для себя язык С++, и спешащего поведать о своем удивлении всему миру.


К молодым людям нельзя относиться свысока. Очень может быть, что повзрослев, они станут выдающимися мужами. Только тот, кто ничего не достиг, дожив до сорока или пятидесяти лет, не заслуживает уважения.

Благородный муж помогает людям увидеть доброе в себе и не поучает людей видеть в себе дурное. А низкий человек поступает наоборот.

Благородный муж знает о своем превосходстве, но избегает соперничества. Он ладит со всеми, но ни с кем не вступает в сговор.

Благородный муж в душе безмятежен. Низкий человек всегда озабочен.

— Конфуций
Re[2]: Занимательный C++
От: enji  
Дата: 20.03.11 10:06
Оценка:
Здравствуйте, enji, Вы писали:

Ступил.
Пусть первым выполнится i++, тогда получим 5 + 7 = 12
Пусть первым выполнится ++i, тогда получим 6 + 6 = 12

Как получить 10, 11, 13 и 14?
Re: Занимательный C++ от Страуструпа
От: SergeCpp Россия http://zoozahita.ru
Дата: 20.03.11 10:41
Оценка:
Здравствуйте, Старостин Василий Викторович!

Вот ещё несколько весёлых и интересных примеров на языке C++ от Страуструпа:
Generalizing Overloading for C++2000

And, yes, several of the suggestions are technically feasible...

- Bjarne (Bjarne Stroustrup)


P.S. В ссылках использована Way Back Machine, так как у меня сейчас не открывается ни www.research.att.com ни www2.research.att.com

P.P.S. Статья эта упоминалась ранее на форуме:
http://rsdn.ru/forum/humour/358179.aspx
Автор:
Дата: 19.08.03

http://rsdn.ru/forum/cpp/979919.aspx
Автор: ssm
Дата: 10.01.05
http://zoozahita.ruБездомные животные Екатеринбурга ищут хозяев
страуструп
Re[2]: Занимательный C++
От: BulatZiganshin  
Дата: 20.03.11 10:50
Оценка:
Здравствуйте, enji, Вы писали:

E>int i = 5;

E>int j = i++ + ++i;

E>Как получить 10, 11 и 14?


t1 = i
++i
t2 = i
i++
j=t1+t2

вышло 11. аналогично можно получить 13. 10 и 14 — не выйдет. зато 12 можно получить 2 способами — и как 5+7, и как 6+6
Люди, я люблю вас! Будьте бдительны!!!
Re[3]: Занимательный C++
От: BulatZiganshin  
Дата: 20.03.11 10:52
Оценка:
Здравствуйте, enji, Вы писали:

E>Пусть первым выполнится i++, тогда получим 5 + 7 = 12

E>Пусть первым выполнится ++i, тогда получим 6 + 6 = 12

ты не знаком с sequence points? операции инкременитрования и взятия значений слева и спртава от + могут выполняться в любом порядке. это позволяет генерировать наиболее оптимальную программу
Люди, я люблю вас! Будьте бдительны!!!
Re: Занимательный C++
От: CreatorCray  
Дата: 20.03.11 11:06
Оценка: +9
Здравствуйте, Старостин Василий Викторович, Вы писали:

Статья то ни о чём.
Можно сказать: выжимка "забавного" из местных форумов.
Да ещё и с ошибками (см. пост Re: Занимательный C++
Автор: nen777w
Дата: 20.03.11
)
Странно выглядит в сочетании с "Ведущий программист" в профиле.
... << RSDN@Home 1.1.4 stable SR1 rev. 568>>
Re[3]: Занимательный C++
От: Pavel Dvorkin Россия  
Дата: 20.03.11 11:29
Оценка: +4 -1
Здравствуйте, jyuyjiyuijyu, Вы писали:


J>К молодым людям нельзя относиться свысока. Очень может быть, что повзрослев, они станут выдающимися мужами. Только тот, кто ничего не достиг, дожив до сорока или пятидесяти лет, не заслуживает уважения.


Все верно, но это не причина публиковать подобные открытия молодых людей.
With best regards
Pavel Dvorkin
Re: Занимательный C++
От: Masterkent  
Дата: 20.03.11 13:05
Оценка: 8 (4)
Раз уж завели такой топик, покажу один из подарочков, уготованных нам комитетом по стандартизации C++:

http://ideone.com/CoyN7

Howard Hinnant из Library Working Group, с которым я недавно беседовал, не видит ничего плохого в том, что у std::pair и std::tuple при инстанцировании их ссылочными типами copy/move конструкторы делают совсем не то же самое, что copy/move операторы присваивания, и вот такое необычное поведение программы его, похоже, полностью устраивает.
Re[2]: Занимательный C++
От: Lorenzo_LAMAS  
Дата: 20.03.11 16:53
Оценка: :)
PD>Единственное, что в этих примерах занимательного — это детское удивление автора, впервые открывшего для себя язык С++, и спешащего поведать о своем удивлении всему миру.

первый раз захотелось поставить тебе оценку "Спасибо"
Of course, the code must be complete enough to compile and link.
Re[2]: Занимательный C++
От: Basil2 Россия https://starostin.msk.ru
Дата: 20.03.11 17:07
Оценка: 2 (1) +2
Здравствуйте, CreatorCray, Вы писали:

CC>Статья то ни о чём.

CC>Можно сказать: выжимка "забавного" из местных форумов.

Ну... да.
Она и названа вовсе не "глубокая всеобъемлющая статья об особенностях трансляции С++".
Основная идея была написать короткую "легкую" статью, о том что зацепило в детстве. Кого не цепляло, могу только посочувствовать!
Проект Ребенок8020 — пошаговый гайд как сделать, вырастить и воспитать ребенка.
Re[3]: Занимательный C++
От: alpha21264 СССР  
Дата: 20.03.11 17:21
Оценка:
Здравствуйте, jyuyjiyuijyu, Вы писали:

J>Здравствуйте, Pavel Dvorkin, Вы писали:


PD>>Здравствуйте, Старостин Василий Викторович, Вы писали:


PD>>Единственное, что в этих примерах занимательного — это детское удивление автора, впервые открывшего для себя язык С++, и спешащего поведать о своем удивлении всему миру.


J>К молодым людям нельзя относиться свысока. Очень может быть, что повзрослев, они станут выдающимися мужами. Только тот, кто ничего не достиг, дожив до сорока или пятидесяти лет, не заслуживает уважения.


J>- Конфуций


Надо пометку какую-нибудь ставить. Типа "для самых маленьких". Ну или не так сурово "для начинающих".

Течёт вода Кубань-реки куда велят большевики.
Re: Занимательный C++
От: minorlogic Украина  
Дата: 20.03.11 17:32
Оценка:
Для любознательных вопрос.

1. как определятся время жизни кинутого исключения?
2. В какой памяти живет кинутое исключение (по значению)?
... << RSDN@Home 1.2.0 alpha 4 rev. 1237>>
Ищу работу, 3D, SLAM, computer graphics/vision.
Re[3]: Занимательный C++
От: CreatorCray  
Дата: 20.03.11 23:14
Оценка:
Здравствуйте, Basil2, Вы писали:

CC>>Статья то ни о чём.

CC>>Можно сказать: выжимка "забавного" из местных форумов.

B>Ну... да.

B>Она и названа вовсе не "глубокая всеобъемлющая статья об особенностях трансляции С++".
B>Основная идея была написать короткую "легкую" статью, о том что зацепило в детстве. Кого не цепляло, могу только посочувствовать!
Тогда надо было писать в КУ
... << RSDN@Home 1.1.4 stable SR1 rev. 568>>
Re[4]: Занимательный C++
От: Vain Россия google.ru
Дата: 21.03.11 03:27
Оценка: -3
Здравствуйте, Pavel Dvorkin, Вы писали:

J>>К молодым людям нельзя относиться свысока. Очень может быть, что повзрослев, они станут выдающимися мужами. Только тот, кто ничего не достиг, дожив до сорока или пятидесяти лет, не заслуживает уважения.

PD>Все верно, но это не причина публиковать подобные открытия молодых людей.
Вы сами назвали это открытием и приписали это автору.
[In theory there is no difference between theory and practice. In
practice there is.]
[Даю очевидные ответы на риторические вопросы]
Подождите ...
Wait...
Пока на собственное сообщение не было ответов, его можно удалить.