crossplatform.ru

Здравствуйте, гость ( Вход | Регистрация )


  Ответ в Нюанс оператора вывода в поток
Введите ваше имя
Подтвердите код

Введите в поле код из 6 символов, отображенных в виде изображения. Если вы не можете прочитать код с изображения, нажмите на изображение для генерации нового кода.
Теги
Выровнять по центру
Ссылка на тему
Ссылка на сообщение
Скрытый текст
Сокращение
Код с подсветкой
Offtopic
 
Удалить форматирование
Спец. элементы
Шрифт
Размер
 
Цвет шрифта
 
Отменить ввод
Вернуть ввод
Полужирный
Курсив
Подчеркнутый
 
 
Смайлики
Вставить изображение
Вставить адрес электронной почты
Цитата
Код
Раскрывающийся текст
 
Увеличить отступ
По левому краю
По центру
По правому краю
Вставить список
Вставить список

Опции сообщения
 Включить смайлы?
Иконки сообщения
(Опционально)
                                
                                
  [ Без иконки ]
 


Последние 10 сообщений [ в обратном порядке ]
Tonal Дата 15.4.2010, 10:17
 
Цитата(Litkevich Yuriy @ 12.4.2010, 17:29) *
я избегаю использовать for, т.к. его форма записи для меня не очевидна, нужно помнить, а не просто читать, каково его поведение.

Выход из циклов в С всегда по лжи - помнить нужно только это.
Базовые формы языка нужно знать, аднака. :)
Litkevich Yuriy Дата 12.4.2010, 13:29
 
Цитата(Tonal @ 12.4.2010, 14:43) *
я бы на for переделал
я избегаю использовать for, т.к. его форма записи для меня не очевидна, нужно помнить, а не просто читать, каково его поведение. Т.е. выход по истинности или ложности. С while этой проблемы для меня нет. т.к. я просто читаю:
пока (что-то){
    делаем что-то
}

С паскалеподобным for у меня тоже нет проблем:
для i от 5 до 10 с шагом 1{
    делаем что-то
}
Tonal Дата 12.4.2010, 10:43
  Это один из видов классического UB.
Твой код эквивалентен следующему:
int a = 0;
int b = a + a++;
cout<<b;

Вывод может быть как 0 так и 2.

Да, код вывода я бы на for переделал. :)
Litkevich Yuriy Дата 8.4.2010, 22:04
 
Цитата(Влад @ 9.4.2010, 1:30) *
что есть выражение "qDebug() << нечто" в смысле языка C++ ?
у меня была аналогия с оператором "+", т.е.
A + B + C
которая распадается на:
A + B = Результат1
и
Результат1 + C
но эта аналогия не работает для оператора "<<"
Влад Дата 8.4.2010, 21:30
  Попробуй сам себе ответить на следующие вопросы: что есть выражение "qDebug() << нечто" в смысле языка C++ ? Где точки следования? В каком порядке будут вычисляться подвыражения этого полного выражения? Почему? В какой момент они должны быть вычислены? Почему?
Litkevich Yuriy Дата 8.4.2010, 15:16
  Тут для себя интересное открытие совершил. Был код:
int size = combo->count();
int index = 0;
qDebug() << "=== INDEX -" << index << "===";
while (index != size){
    qDebug() << "INDEX:" << index << "\tVALUE:" << combo->itemText(index++);
}
Ожидал, что будет напечатано:
=== INDEX - 0 ===
INDEX: 0        VALUE: "text-1"
INDEX: 1        VALUE: "text-2"
Однако напечатано было:
=== INDEX - 0 ===
INDEX: 1        VALUE: "text-1"
INDEX: 2        VALUE: "text-2"
Я полагал, что инкремент будет последней операцией, однако он почему-то стал второй. Т.е. получается выполнение идёт с конца оператора вывода в поток.
Код переделал так:
int size = combo->count();
int index = 0;
qDebug() << "=== INDEX -" << index << "===";
while (index != size){
    qDebug() << "INDEX:" << index << "\tVALUE:" << combo->itemText(index);
    index++;
}
тогда стало печататься как ожидаемо.

Может кому-то пригодится
Просмотр темы полностью (откроется в новом окне)
RSS Рейтинг@Mail.ru Текстовая версия Сейчас: 10.7.2025, 6:51