Форум программистов, компьютерный форум, киберфорум
Наши страницы

С++ для начинающих

Войти
Регистрация
Восстановить пароль
 
 
Рейтинг: Рейтинг темы: голосов - 24, средняя оценка - 4.63
Tamara333
3 / 3 / 0
Регистрация: 27.12.2010
Сообщений: 22
#1

Инкрементация (не могу понять почему так?) - C++

16.01.2011, 16:01. Просмотров 3033. Ответов 30
Метки нет (Все метки)

Гуру в программировании на C++ начала изучать язык, и сразу вопросы
почему при выполнении

C++
1
2
3
4
5
6
7
8
9
10
11
#pragma argsused
#include <conio.h>
#include<iostream.h>
 
int main()
{
 int a=0;
 printf("%d \n%d \n%d \n%d \n%d \n%d \n%d",a,a++,a++,a++,a++,a++,a++);
 getch();
 return 0;
}


выдает

6
5
4
3
2
1
0

а не наоборот
0
1
2
3
4
5
6

???

Добавлено через 22 минуты
с нетерпением жду ответа =)
2
Лучшие ответы (1)
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
16.01.2011, 16:01
Я подобрал для вас темы с готовыми решениями и ответами на вопрос Инкрементация (не могу понять почему так?) (C++):

Символьные литералы, указатели и функция. Не могу понять, почему именно так - C++
Доброго времени суток всем! :) Изучаю С++, всегда стараюсь добить до последнего код, чтобы не было непоняток. Но сейчас наткнулся на...

не могу понять что не так((((( - C++
привет всем! у меня проблемка возникла компиятор никак не проглатывает мой код #include &lt;iostream&gt; using namespace std; int main() ...

не могу понять что не так - C++
задание такое : Структура &quot;книга почтой&quot;:-наименование книги;-ФИО автора;-номер по каталогу;-издательство;-колличество в...

Не могу понять почему - C++
Есть кода программы(код взят разобраться): #include&lt;iostream&gt; using namespace std; class coord { protected: public: int x,y; ...

Не могу понять почему... - C++
#include &quot;stdafx.h&quot; void main() { funct(); _getch(); } void funct() {

Не могу понять, почему? - C++
Доброго времени суток=) Такая печаль. Создается класс Окружность с полями радиус, площадь и длина окружности. Нужно создать функции...

30
Mr.X
Эксперт С++
3060 / 1705 / 265
Регистрация: 03.05.2010
Сообщений: 3,867
16.01.2011, 19:29 #16
Ежели сформулировать ответ простыми словами, то в C++ порядок вычисления операндов выражения не определен (кроме операторов “&&”, “||”, “?:”, и “.”), поэтому не следует писать программы, полагаясь на какой-либо определенный порядок вычисления операндов.
В приведенном же примере автор надеется, что операнды будут вычисляться слева направо, но компилятор свободен в этом вопросе как муха в полете.

Добавлено через 9 минут
Цитата Сообщение от no0ker Посмотреть сообщение
в статье криса касперски есть вот такой момент

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

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

или это чистое UB? (исходя из определения, как попытка изменения переменной между точками следования)
Заталкивание здесь ни при чем, так как точка последовательности находится после вычисления всех аргументов функции, но перед ее вызовом, а порядок вычисления в выражении НЕ ОПРЕДЕЛЕН, это надо четко усвоить и не пытаться писать код, основываясь на своих предположениях на этот счет.
2
no0ker
101 / 88 / 4
Регистрация: 17.12.2010
Сообщений: 416
16.01.2011, 20:09 #17
ну что же, разумно, что это чистое UB - исходя из определения (как изменение переменной между точками следования). что собственно и написано в блоге Алёны С++.
0
Day
1159 / 964 / 57
Регистрация: 29.10.2009
Сообщений: 1,385
17.01.2011, 10:22 #18
Tamara333, хотите добрый совет? НИКОГДА не применяйте подобных конструкций. А то над нами весь Паскаль смеется.

Добавлено через 1 минуту
Хотя ваше любопытство похвально.
0
silent_1991
17.01.2011, 10:47
  #19

Не по теме:

Цитата Сообщение от Day Посмотреть сообщение
А то над нами весь Паскаль смеется
А нам-то что? Пусть хоть лопнет.

0
+c+
112 / 22 / 3
Регистрация: 20.11.2010
Сообщений: 1,294
17.01.2011, 11:38 #20

0
Day
1159 / 964 / 57
Регистрация: 29.10.2009
Сообщений: 1,385
17.01.2011, 13:01 #21
Цитата Сообщение от silent_1991 Посмотреть сообщение

Не по теме:


А нам-то что? Пусть хоть лопнет.

Но нам-то, сишникам, от этих конструкций одни слезы...

Не подумай только, что я против инкрементальных операций. Вовсе нет, напротив, считаю их просто гениальным изобретением. Но как говаривал покойный Залевски, все хорошо в меру.
Приведенная конструкция даже если и имеет однозначную трактовку в стандарте языка, требует скурпулезнейшей разборки и, естесственно, чревата трудноуловимыми ошибками. Тут я где-то встретил топик, где в 40 постах разбирался итог оператора
C
1
 i = i++ + i++;
Нам это надо?
Но если кому-то интересно, сколько чертей поместится на острие иглы - пожалуйста, ребята, играйте. экспериментируйте, полируйте мозги до блеска. Но когда будете решать серьезные задачи - пожалуйста, не надо.
1
silent_1991
Эксперт С++
5005 / 3063 / 149
Регистрация: 11.11.2009
Сообщений: 7,043
Завершенные тесты: 1
17.01.2011, 13:23 #22
Day, да, но, с другой стороны, в мире куча опасных вещей, которые, однако, если их правильно использовать, только помогают нам, а если неправильно - убивают. Главное - знать, как с ними правильно обращаться, и плакать не придётся))
0
ForEveR
В астрале
Эксперт С++
7992 / 4751 / 321
Регистрация: 24.06.2010
Сообщений: 10,547
Завершенные тесты: 3
17.01.2011, 13:27 #23
Day, Знать результаты таких действий полезно для собеседований.
1
Байт
Эксперт C
17665 / 11705 / 1864
Регистрация: 24.12.2010
Сообщений: 23,358
17.01.2011, 18:04 #24
Цитата Сообщение от ForEveR Посмотреть сообщение
Day, Знать результаты таких действий полезно для собеседований.
А с кем вы беседуете? Или с вами беседуют? И о чем?
Если б мне предложили такого типа вопросы при приеме на работу, я бы ногу поднял и хвостом махнул!
Есть другой вариант - если соискатель пытается на такой вопрос ответить - гнать его в загривок!
Если отвечает правильно - загрызть!
1
silent_1991
Эксперт С++
5005 / 3063 / 149
Регистрация: 11.11.2009
Сообщений: 7,043
Завершенные тесты: 1
17.01.2011, 18:08 #25
Цитата Сообщение от Байт Посмотреть сообщение
ногу поднял и хвостом махнул
И остались бы без работы. Кто остаётся в выигрыше?
0
Day
1159 / 964 / 57
Регистрация: 29.10.2009
Сообщений: 1,385
17.01.2011, 18:09 #26
Цитата Сообщение от silent_1991 Посмотреть сообщение
Day, да, но, с другой стороны, в мире куча опасных вещей, которые, однако, если их правильно использовать, только помогают нам, а если неправильно - убивают. Главное - знать, как с ними правильно обращаться, и плакать не придётся))
Захотелось перечитать Стругацких "Хищные вещи века"
2
Байт
Эксперт C
17665 / 11705 / 1864
Регистрация: 24.12.2010
Сообщений: 23,358
17.01.2011, 18:19 #27
Цитата Сообщение от silent_1991 Посмотреть сообщение
И остались бы без работы. Кто остаётся в выигрыше?
Или Работа без Меня. Ничья.
0
silent_1991
17.01.2011, 18:20
  #28

Не по теме:

Цитата Сообщение от Байт Посмотреть сообщение
Ничья
Да ладно...

0
ForEveR
В астрале
Эксперт С++
7992 / 4751 / 321
Регистрация: 24.06.2010
Сообщений: 10,547
Завершенные тесты: 3
17.01.2011, 18:25 #29
Байт, Проигрыш.
+ к тому программист должен бы отличать UB от нормальной конструкции. Да и даже unspecified должен. А вот когда идут вопросы - что будет конкретно - стоит слать.
1
Temirlan90
134 / 134 / 9
Регистрация: 30.09.2010
Сообщений: 333
17.01.2011, 22:39 #30
А вот когда идут вопросы - что будет конкретно - стоит слать.
ForEveR, вы не могли бы пояснить, что вы под этим текстом имеете ввиду?
Что то вроде того чтобы давать точный ответ? или нет, не могу понять вас.
0
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
17.01.2011, 22:39
Привет! Вот еще темы с ответами:

Обьясните что не так не могу понять - C++
программа должна менять цвет bmp файла но при запуске выдает ошибку что 2 неразрешимых внешних элемента есть и все я пробовал разобраться...

Не могу понять, что не так в коде - C++
Целый день маюсь с этой прогой и ничё не выходит. #include &lt;iostream&gt; #include &lt;windows.h&gt; using namespace std; int main() { ...

Не могу понять почему не запускается - C++
Программа не запускается, скажите пожалуйста где ошибка? #include &lt;stdio.h&gt; #include &lt;conio.h&gt; #include &lt;iostream&gt; using...

Не могу понять почему не работает - C++
#include &lt;iostream&gt; #include &lt;string&gt; using namespace std; const int arrSize = 15; int main() { string Phone; ...


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
30
Ответ Создать тему
Опции темы

КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2018, vBulletin Solutions, Inc.
Рейтинг@Mail.ru