![]() |
Модераторы: bsa |
![]() ![]() ![]() |
|
azesmcar |
|
||||||||
![]() uploading... ![]() ![]() ![]() ![]() Профиль Группа: Участник Клуба Сообщений: 6291 Регистрация: 12.11.2004 Где: Армения Репутация: 52 Всего: 211 |
У Сыроежки есть квест, а у всех остальных - нет. Стало как-то обидно и я решил устранить это досадное недоразумение.
1. есть ли какие-то принципиальные различия между тернарным оператором и оператором if, если есть, то какие. другими словами можно ли написать что либо тернарным оператором, что нельзя написать простым if-ом 2. что будет выведено и почему?
3. что делает этот код?
4. что выведет код и почему?
5. есть ли разница между переменными x1, x2 и x3, x4. Если есть, то какая?
6. Какой конструктор копирования генерирует компилятор для класса при необходимости, с константной ссылкой или нет? пока это ![]() Это сообщение отредактировал(а) azesmcar - 9.7.2011, 14:20 |
||||||||
|
|||||||||
fish9370 |
|
|||
![]() Опытный ![]() ![]() Профиль Группа: Участник Сообщений: 663 Регистрация: 15.4.2007 Где: Москва Репутация: 1 Всего: 1 |
квест по Си, пожалуйста, в студию..
-------------------- undefined |
|||
|
||||
Сыроежка |
|
|||
Шустрый ![]() Профиль Группа: Участник Сообщений: 127 Регистрация: 24.6.2011 Репутация: 1 Всего: 1 |
Здесь все просто . Если я правильно разглядел, то ч присваивается результат оператора "запятая", то есть последнее выражение, которое соответсвует вызову функции foo. Функция возвращает ++y, то есть значение равное 1. Поэтому и x. и y будут равны 1. Я это написал без всякой проверки с помощью компилятора. Было бы интереснее, если бы вы написали x = (y = 10, foo() ); А в самой функции не return ++y; а return y++; Это сообщение отредактировал(а) Сыроежка - 9.7.2011, 20:35 |
|||
|
||||
Qu1nt |
|
|||
![]() Опытный ![]() ![]() Профиль Группа: Участник Сообщений: 602 Регистрация: 13.1.2007 Репутация: нет Всего: 50 |
Сыроежка,
|
|||
|
||||
volatile |
|
|||
![]() Эксперт ![]() ![]() ![]() ![]() Профиль Группа: Завсегдатай Сообщений: 2107 Регистрация: 7.1.2011 Репутация: 16 Всего: 85 |
У оператора запятая, приоритет ниже чем у оператора присваивания. Знатоку тонкостей автоматического приведения типов, как-то не к лицу путаться с приоритетами. Но хоть, по крайней мере, честно |
|||
|
||||
voral |
|
|||
Бывалый ![]() Профиль Группа: Участник Сообщений: 158 Регистрация: 16.3.2008 Где: Иваново Репутация: нет Всего: нет |
Мда.... 4ый не допетрил почему поучилось то, что получилось
![]() |
|||
|
||||
volatile |
|
|||
![]() Эксперт ![]() ![]() ![]() ![]() Профиль Группа: Завсегдатай Сообщений: 2107 Регистрация: 7.1.2011 Репутация: 16 Всего: 85 |
voral, Здесь идет вызов foo(2); так как (1, 2) заключен в скобки, это всё - первый аргумент. Единица просто теряется, остается 2 Это сообщение отредактировал(а) volatile - 10.7.2011, 00:10 |
|||
|
||||
boostcoder |
|
|||
![]() pattern`щик ![]() ![]() ![]() ![]() Профиль Группа: Завсегдатай Сообщений: 5458 Регистрация: 1.4.2010 Репутация: 20 Всего: 110 |
не хочу торопить события... но сыроежко пустозвон? как мальчик колокольчик? я именно так и понял его ответы)
|
|||
|
||||
voral |
|
|||
Бывалый ![]() Профиль Группа: Участник Сообщений: 158 Регистрация: 16.3.2008 Где: Иваново Репутация: нет Всего: нет |
||||
|
||||
volatile |
|
|||
![]() Эксперт ![]() ![]() ![]() ![]() Профиль Группа: Завсегдатай Сообщений: 2107 Регистрация: 7.1.2011 Репутация: 16 Всего: 85 |
У присваивания приоритет выше выполняется так i = 1; 2; Здесь можно задать вопрос почему в программе можно писать 2; и это не будет ошибкой. Можете попробовать. Корректная (хотя и абсолютно бесполезная) программа:
http://liveworkspace.org/code/5b387bc649b1...a41564ee35503fa ![]() |
|||
|
||||
voral |
|
||||
Бывалый ![]() Профиль Группа: Участник Сообщений: 158 Регистрация: 16.3.2008 Где: Иваново Репутация: нет Всего: нет |
Я это знаю. И понимаю, почему выбрано именно 1. И сам же сказал, что будет 1. Меня больше интересует вопрос почему
здесь будет равно 2. Пробовал подставлять функции - отрабатывают обе. Правильно ли я понимаю, что здесь, упрощенно, раскладывается на две операции: i=1; i=2; соответственно первая в компилированный код не идет за ненадобностью. (Если функция то она вызывается) Поэкспериментировал с gdb
|
||||
|
|||||
asmdzen |
|
|||
![]() ![]() ![]() Профиль Группа: Участник Сообщений: 345 Регистрация: 28.11.2010 Репутация: 3 Всего: 5 |
||||
|
||||
volatile |
|
|||
![]() Эксперт ![]() ![]() ![]() ![]() Профиль Группа: Завсегдатай Сообщений: 2107 Регистрация: 7.1.2011 Репутация: 16 Всего: 85 |
Потому-что скобки. (Разве не очевидно?) ![]() Сначала, вычисляется выражение в скобках temp = 1; temp = 2; и потом присваивается переменной i = temp; Ну где-то так.. Смотреть на асме - естественно бесполезно. Любой мало-мальский оптимизатор зарубит это на корню. Добавлено через 1 минуту и 29 секунд Упс, пока я тут заваривал кофе asmdzen, уже ответил. Сорри. |
|||
|
||||
asmdzen |
|
||||
![]() ![]() ![]() Профиль Группа: Участник Сообщений: 345 Регистрация: 28.11.2010 Репутация: 3 Всего: 5 |
volatile, lock(thread) забыл
![]()
параметры функции? типа:
Это сообщение отредактировал(а) asmdzen - 10.7.2011, 12:46 |
||||
|
|||||
azesmcar |
|
|||
![]() uploading... ![]() ![]() ![]() ![]() Профиль Группа: Участник Клуба Сообщений: 6291 Регистрация: 12.11.2004 Где: Армения Репутация: 52 Всего: 211 |
это можно написать с помощью if, код будет выглядеть иначе, но можно. Добавлено через 1 минуту и 3 секунды
так работает оператор запятая. не совсем понятно в чем вопрос. |
|||
|
||||
![]() ![]() ![]() |
Правила форума "C/C++: Для новичков" | |
|
Запрещается! 1. Публиковать ссылки на вскрытые компоненты 2. Обсуждать взлом компонентов и делиться вскрытыми компонентами
Если Вам понравилась атмосфера форума, заходите к нам чаще! С уважением, JackYF, bsa. |
1 Пользователей читают эту тему (1 Гостей и 0 Скрытых Пользователей) | |
0 Пользователей: | |
« Предыдущая тема | C/C++: Для новичков | Следующая тема » |
|
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности Powered by Invision Power Board(R) 1.3 © 2003 IPS, Inc. |