![]() |
|
Модераторы: Daevaorn |
![]()
|
|
| SABROG |
|
|||
![]() Hacker ![]() ![]() ![]() ![]() Профиль Группа: Завсегдатай Сообщений: 2481 Регистрация: 18.9.2006 Репутация: 4 Всего: 91 |
Случайно наткнулся на одном форуме на такую штуку
Вопрос на проверку знаний C++. Не компилируя код, попробуйте ответить на следующие вопросы: - скомпилируется ли это? будут ли warning'и? - какое значение примет tst? - как подобную запись можно трактовать с точки зрения компилятора. Т.е. объяснить происходящее. З.Ы.: это не тест, не задачка и не лабораторная. Вопрос для тех кому просто интересно поразмышлять |
|||
|
||||
| Alexiski |
|
|||
|
Новичок Профиль Группа: Участник Сообщений: 14 Регистрация: 12.12.2008 Репутация: нет Всего: 1 |
Сначала показалось, что скобки - фигурные. Ответ тогда резко другой..
|
|||
|
||||
| mes |
|
|||
|
любитель ![]() ![]() ![]() ![]() Профиль Группа: Участник Клуба Сообщений: 7954 Регистрация: 14.1.2006 Репутация: 144 Всего: 250 |
||||
|
||||
| nmn |
|
|||
|
Опытный ![]() ![]() Профиль Группа: Участник Сообщений: 593 Регистрация: 26.11.2005 Репутация: нет Всего: 1 |
будет 4
|
|||
|
||||
| SABROG |
|
|||
![]() Hacker ![]() ![]() ![]() ![]() Профиль Группа: Завсегдатай Сообщений: 2481 Регистрация: 18.9.2006 Репутация: 4 Всего: 91 |
||||
|
||||
| Любитель |
|
|||
|
Программист-романтик ![]() ![]() ![]() ![]() Профиль Группа: Комодератор Сообщений: 3645 Регистрация: 21.5.2005 Где: Воронеж Репутация: 24 Всего: 92 |
В данном контексте - нет никакого смысла в такой записи
|
|||
|
||||
| mes |
|
|||
|
любитель ![]() ![]() ![]() ![]() Профиль Группа: Участник Клуба Сообщений: 7954 Регистрация: 14.1.2006 Репутация: 144 Всего: 250 |
тогда мне непонятно название темы... инициализация тут (по отношению к результату содержимого скобок) не при чем. |
|||
|
||||
| SABROG |
|
|||
![]() Hacker ![]() ![]() ![]() ![]() Профиль Группа: Завсегдатай Сообщений: 2481 Регистрация: 18.9.2006 Репутация: 4 Всего: 91 |
Мне ничего более умного в голову не пришло. А интересен этот способ инициализации тем, что можно пустить человека по ложному следу, когда он начнет разбираться в чужих исходниках. Это конечно, если новичек. Мало ли зачем может пригодиться. Для тестов в универе и т.п. Ну так не интересно, опять гуру повылазили и обсуждают некорректность сего задания. |
|||
|
||||
| Torsten |
|
|||
![]() Бывалый ![]() Профиль Группа: Участник Сообщений: 174 Регистрация: 10.6.2008 Где: Pskov Репутация: 3 Всего: 7 |
Я бы заминусовал за такой код
Это из разряда, смотрите какой я дятел, вот я написал, а вы нубы теперь думайте как тут и что. Понты, тупые понты. --------------------
We have no begining, we have no end. We are infinite. |
|||
|
||||
| SABROG |
|
|||
![]() Hacker ![]() ![]() ![]() ![]() Профиль Группа: Завсегдатай Сообщений: 2481 Регистрация: 18.9.2006 Репутация: 4 Всего: 91 |
О как интересно. Меня обозвали дятлом и быком Никого обидеть не хотел, просто нашел интересную, видимо только для себя, фишку. Захотел поделиться. Ладно, полезу-ка я туда откуда вылез |
|||
|
||||
| mes |
|
|||
|
любитель ![]() ![]() ![]() ![]() Профиль Группа: Участник Клуба Сообщений: 7954 Регистрация: 14.1.2006 Репутация: 144 Всего: 250 |
про дятла нашел, а вот про быка где ?! Это сообщение отредактировал(а) mes - 2.3.2009, 13:06 |
|||
|
||||
| zim22 |
|
|||
|
depict1 ![]() ![]() ![]() ![]() Профиль Группа: Завсегдатай Сообщений: 2682 Регистрация: 15.1.2009 Где: Украина Репутация: 24 Всего: 69 |
насколько я помню, или у Саттера или Мейерса было что-то следующего:
а вообще ничего тут сложного нет. обычный оператор "запятая". Как он работает можно усвоить за 5 мин. Цитирую: "Оператор запятая (comma expression) используется в случаях, где ряд выражений отделяется запятыми. Выражения обрабатываются слева направо. Результатом оператора запятая (,) является правый операнд. Если правый операнд является l-значением, результат также будет l-значением." Его "фишка" в том, что выражения 100% будут выполняться слева направо. |
|||
|
||||
| SABROG |
|
|||
![]() Hacker ![]() ![]() ![]() ![]() Профиль Группа: Завсегдатай Сообщений: 2481 Регистрация: 18.9.2006 Репутация: 4 Всего: 91 |
Неудачно сравнил, хотел сказать, что быки понтуются, но они обычно бычат. Значит я фраер
А вот это уже интересное применение. Похожую тему на RSDN нашел http://www.rsdn.ru/forum/message/1387684.flat.aspx#1387684 Это сообщение отредактировал(а) SABROG - 2.3.2009, 13:32 |
|||
|
||||
| zim22 |
|
|||
|
depict1 ![]() ![]() ![]() ![]() Профиль Группа: Завсегдатай Сообщений: 2682 Регистрация: 15.1.2009 Где: Украина Репутация: 24 Всего: 69 |
угу. можно писать такой извращённый код:
|
|||
|
||||
| SABROG |
|
|||
![]() Hacker ![]() ![]() ![]() ![]() Профиль Группа: Завсегдатай Сообщений: 2481 Регистрация: 18.9.2006 Репутация: 4 Всего: 91 |
Во, еще вопрос придумал. А теперь тот же код, но без скобок. Что будет в tst
|
|||
|
||||
| Любитель |
|
|||
|
Программист-романтик ![]() ![]() ![]() ![]() Профиль Группа: Комодератор Сообщений: 3645 Регистрация: 21.5.2005 Где: Воронеж Репутация: 24 Всего: 92 |
|
|||
|
||||
| mrbrooks |
|
|||
![]() трололомен ![]() ![]() ![]() ![]() Профиль Группа: Завсегдатай Сообщений: 4259 Регистрация: 4.10.2006 Где: Дол Гулдур Репутация: 2 Всего: 306 |
SABROG, без скобок мягкотелый ругаетсо. оно и ясно.
Добавлено через 3 минуты и 26 секунд Борману тоже не нравится |
|||
|
||||
| mes |
|
|||
|
любитель ![]() ![]() ![]() ![]() Профиль Группа: Участник Клуба Сообщений: 7954 Регистрация: 14.1.2006 Репутация: 144 Всего: 250 |
a оно скомпилится ?! |
|||
|
||||
| SABROG |
|
|||
![]() Hacker ![]() ![]() ![]() ![]() Профиль Группа: Завсегдатай Сообщений: 2481 Регистрация: 18.9.2006 Репутация: 4 Всего: 91 |
Нет, гнутый тоже плюётся. Странно, что такому детей тут учат http://users.msu.dubna.ru/~ovg/c++course/p1-3.html |
|||
|
||||
| zim22 |
|
||||||
|
depict1 ![]() ![]() ![]() ![]() Профиль Группа: Завсегдатай Сообщений: 2682 Регистрация: 15.1.2009 Где: Украина Репутация: 24 Всего: 69 |
Пример из MSND
У меня есть подозрение, что это разные ситуации. В первом случае
происходит инициализация переменной (copy-initialization), при которой подразумевается использование знака равенства. инициализация же не является присвоением. во втором же
вызывается оператор присвоения. Это сообщение отредактировал(а) zim22 - 2.3.2009, 14:19 |
||||||
|
|||||||
| SABROG |
|
||||||
![]() Hacker ![]() ![]() ![]() ![]() Профиль Группа: Завсегдатай Сообщений: 2481 Регистрация: 18.9.2006 Репутация: 4 Всего: 91 |
А гнутый такое не хавает:
А такое хавает
Это сообщение отредактировал(а) SABROG - 2.3.2009, 14:37 |
||||||
|
|||||||
| mes |
|
||||
|
любитель ![]() ![]() ![]() ![]() Профиль Группа: Участник Клуба Сообщений: 7954 Регистрация: 14.1.2006 Репутация: 144 Всего: 250 |
ага, разные и тут в статье правильно написано а вот ниже, имхо, немножко вводят заблуждение :
не знаю как на Си, a на С++ подобный пример даст UB. Это сообщение отредактировал(а) mes - 2.3.2009, 14:39 |
||||
|
|||||
| vinter |
|
|||
![]() Explorer ![]() ![]() ![]() ![]() Профиль Группа: Завсегдатай Сообщений: 2735 Регистрация: 1.4.2006 Где: Н.Новгород Репутация: 13 Всего: 56 |
с чего бы? а должен, может я знаю что я делаю и мне надо именно так. а почему нет? |
|||
|
||||
| SABROG |
|
|||
![]() Hacker ![]() ![]() ![]() ![]() Профиль Группа: Завсегдатай Сообщений: 2481 Регистрация: 18.9.2006 Репутация: 4 Всего: 91 |
Наверное, все-таки не должен, т.к. возникает двойная трактовка. Приходится ему явно говорить мол "Вась, это не декларация" В общем вот что получается:
Это сообщение отредактировал(а) SABROG - 2.3.2009, 15:17 |
|||
|
||||
| mes |
|
|||
|
любитель ![]() ![]() ![]() ![]() Профиль Группа: Участник Клуба Сообщений: 7954 Регистрация: 14.1.2006 Репутация: 144 Всего: 250 |
vinter, это из той же оперы которую мы на днях обсуждали. В данном случае запятая есть разделитель аргументов, а не operator ,(); а в функции порядок вычисления аргументов стандартом не определяется и следовательно хотя бы одноразовое изменение и двойное употребление одной и той же переменной ведет к UB. потому что в декларации "," это тоже не operator,() , так же как "=" в декларации это не присваивание. Это сообщение отредактировал(а) mes - 2.3.2009, 15:23 |
|||
|
||||
| vinter |
|
|||
![]() Explorer ![]() ![]() ![]() ![]() Профиль Группа: Завсегдатай Сообщений: 2735 Регистрация: 1.4.2006 Где: Н.Новгород Репутация: 13 Всего: 56 |
||||
|
||||
| mes |
|
|||
|
любитель ![]() ![]() ![]() ![]() Профиль Группа: Участник Клуба Сообщений: 7954 Регистрация: 14.1.2006 Репутация: 144 Всего: 250 |
ну и что толку от них ?! откуда взять уверенность, что первым посчитается 1й параметр, а не 2й или 3й ? Добавлено @ 16:01 вот запустил такой тестик на gcc
выдает: 4 10 5 6 чем и оправдывает "предположение" (расчет аргументов происходит в обратном порядке..) Это сообщение отредактировал(а) mes - 2.3.2009, 16:03 |
|||
|
||||
| vinter |
|
||||
![]() Explorer ![]() ![]() ![]() ![]() Профиль Группа: Завсегдатай Сообщений: 2735 Регистрация: 1.4.2006 Где: Н.Новгород Репутация: 13 Всего: 56 |
там нет никаких 1,2,3,4 параметров. Там есть один большой параметр - скобка Добавлено через 3 минуты и 28 секунд mes, ты вообще не то сделал. вот так вызывай
|
||||
|
|||||
| mes |
|
|||
|
любитель ![]() ![]() ![]() ![]() Профиль Группа: Участник Клуба Сообщений: 7954 Регистрация: 14.1.2006 Репутация: 144 Всего: 250 |
||||
|
||||
| Dem_max |
|
|||
![]() Эксперт ![]() ![]() ![]() Профиль Группа: Завсегдатай Сообщений: 1780 Регистрация: 12.4.2007 Репутация: 4 Всего: 39 |
это помоему локальное присвоение - аргумент по умолчанию. -------------------- Американские программисты долго не могли понять, почему русские при зависании Windоws всё время повторяют "Твой зайка написал" ("Yоur bunnу wrоte") |
|||
|
||||
| mes |
|
|||
|
любитель ![]() ![]() ![]() ![]() Профиль Группа: Участник Клуба Сообщений: 7954 Регистрация: 14.1.2006 Репутация: 144 Всего: 250 |
не понял .. о чем Вы ? |
|||
|
||||
| zim22 |
|
|||
|
depict1 ![]() ![]() ![]() ![]() Профиль Группа: Завсегдатай Сообщений: 2682 Регистрация: 15.1.2009 Где: Украина Репутация: 24 Всего: 69 |
mes, я предположу, что Dem_max имел ввиду объявление функции с параметрами по умолчанию.
|
|||
|
||||
![]()
|
| Правила форума "С++:Общие вопросы" | |
|
|
Добро пожаловать!
Если Вам понравилась атмосфера форума, заходите к нам чаще! С уважением, Earnest Daevaorn |
| 0 Пользователей читают эту тему (0 Гостей и 0 Скрытых Пользователей) | |
| 0 Пользователей: | |
| « Предыдущая тема | C/C++: Общие вопросы | Следующая тема » |
|
|
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности Powered by Invision Power Board(R) 1.3 © 2003 IPS, Inc. |