Форум программистов, компьютерный форум CyberForum.ru

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

Войти
Регистрация
Восстановить пароль
 
 
Рейтинг: Рейтинг темы: голосов - 13, средняя оценка - 4.69
metaluga145
243 / 244 / 20
Регистрация: 08.04.2013
Сообщений: 927
#1

Что? (оператор "," (запятая)) - C++

09.05.2013, 23:01. Просмотров 1864. Ответов 34
Метки нет (Все метки)

Имеется часть кода, взятого из Википедии.
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
double *alpha = new double[n - 1];
        double *beta = new double[n - 1];
        double A, B, C, F, h_i, h_i1, z;
        alpha[0] = beta[0] = 0.;
        for (std::size_t i = 1; i < n - 1; ++i)
        {
                h_i = x[i] - x[i - 1], h_i1 = x[i + 1] - x[i];
                A = h_i;
                C = 2. * (h_i + h_i1);
                B = h_i1;
                F = 6. * ((y[i + 1] - y[i]) / h_i1 - (y[i] - y[i - 1]) / h_i);
                z = (A * alpha[i - 1] + C);
                alpha[i] = -B / z;
                beta[i] = (F - A * beta[i - 1]) / z;
        }
Меня заинтересовала строчка
C++
1
h_i = x[i] - x[i - 1], h_i1 = x[i + 1] - x[i];
Неужели через запятую можно писать? И в каких случаях такое можно делать?
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
09.05.2013, 23:01     Что? (оператор "," (запятая))
Посмотрите здесь:

подсчитать количество операторов, помня, что каждый оператор заканчивается "," - C++
задание 1: В тексте программы на языке С + + (имя файла на диске ввести по запросу) подсчитать количество операторов, помня, что каждый...

Пожалуйтса обясните что обозначает оператор "~" в C++? - C++
Привет всем... Пожалуйтса обясните что обозначает оператор &quot;~&quot; в C++?

Что означает оператор "->" в заголовке функции - C++
Встретил такой код: template &lt;typename T, typename T1&gt; auto compose(T a, T1 b) -&gt; decltype(a + b) { return a+b; } Со всеми его...

Что означает и делает оператор ">>=" - C++
Глупый вопрос, но тем не менее. Что означает и делает оператор &quot;&gt;&gt;=&quot;. Может есть русское описание?

Что значит оператор "+="? - C++
Вот :(

Как это работает (недокументированное использование оператора "запятая")? - C++
Нашёл один велосипед в сети, можете объяснить как это работает? Что это за недокументированное использование оператора &quot;запятая&quot;? ...

Реализация собственного оператора "запятая" - C++
Всем привет. Подскажите как самому реализовать оператор запятая. Я хочу реализовать как в векторе. vector&lt;int&gt; v; v +=...

После регистрации реклама в сообщениях будет скрыта и будут доступны все возможности форума.
Somebody
2786 / 1600 / 145
Регистрация: 03.12.2007
Сообщений: 4,189
Завершенные тесты: 1
09.05.2013, 23:20     Что? (оператор "," (запятая)) #2
Запятая - последовательное выполнение. Приоритет самый низкий. Используется так же, как и другие операторы: например
C++
1
2
3
4
a = b, c = d;
for (int q = 1; a = b, c = d; e = f, true);
f(1, 2); // 2 параметра
f((1, 2)); // 1 параметр: f(2)
но не
C++
1
if (...) ..., if (...) ...; // *** тут уже не одно выражение
daslex
1271 / 516 / 106
Регистрация: 02.08.2011
Сообщений: 2,665
09.05.2013, 23:21     Что? (оператор "," (запятая)) #3
C++
1
2
3
4
int main()
{
  int A=6,B=8;
}
metaluga145
09.05.2013, 23:26  [ТС]
  #4

Не по теме:

Действительно. Что-то я под вечер плохо соображаю

FreeMan108
121 / 121 / 6
Регистрация: 04.03.2013
Сообщений: 370
09.05.2013, 23:30     Что? (оператор "," (запятая)) #5
По-моему, нельзя ставить запятую перед ключевыми словами.
Somebody
2786 / 1600 / 145
Регистрация: 03.12.2007
Сообщений: 4,189
Завершенные тесты: 1
09.05.2013, 23:40     Что? (оператор "," (запятая)) #6
Цитата Сообщение от daslex Посмотреть сообщение
C++
1
2
3
4
int main()
{
  int A=6,B=8;
}
Это другой случай... Тут объявление и инициализация.
C++
1
2
3
4
int main()
{
  int A=(6,B=8);
}
А тут вот последовательное выполнение, только без особого смысла.
daslex
09.05.2013, 23:43
  #7

Не по теме:

тама вопрос выше написан И в каких случаях такое можно делать?, я поэтому

Somebody
2786 / 1600 / 145
Регистрация: 03.12.2007
Сообщений: 4,189
Завершенные тесты: 1
09.05.2013, 23:47     Что? (оператор "," (запятая)) #8
Цитата Сообщение от FreeMan108 Посмотреть сообщение
По-моему, нельзя ставить запятую перед ключевыми словами.
C++
1
new int, new int;
Цитата Сообщение от daslex Посмотреть сообщение
тама вопрос выше написан И в каких случаях такое можно делать?
Так это уже не "такое", а другое.
daslex
1271 / 516 / 106
Регистрация: 02.08.2011
Сообщений: 2,665
10.05.2013, 00:08     Что? (оператор "," (запятая)) #9
Не вижу особой разницы между тем, что я написал и например первоначальным и нижним кодом
C++
1
2
3
4
for 
        {
                h_i = x[i] - x[i - 1], h_i1 = x[i + 1] - x[i];             
        }

C++
1
2
3
4
5
6
int x,y;
 
for (int i=0;i<10;i++)
{
x=i,y=i+6;
}
silent_1991
Эксперт С++
4960 / 3036 / 149
Регистрация: 11.11.2009
Сообщений: 7,027
Завершенные тесты: 1
13.05.2013, 20:12     Что? (оператор "," (запятая)) #10
daslex, разница есть. Она заключается в том, что для синтаксического анализатора это два разных случая, два правила, которые порождают разные машинные инструкции (в примере с объявлением через запятую используется не оператор "запятая", а обычное перечисление). Третий вариант, где можно использовать запятую - при вызове функции, перечисляя её аргументы, но это также совершенно другой вариант запятой, не имеющий никакого отношения к оператору "запятая". К слову, оператор "запятая" можно перегрузить для собственного типа данных, но эта перегрузка не будет иметь никакого значения при объявлении и при вызове функций.
daslex
13.05.2013, 20:20
  #11

Не по теме:

silent_1991, да мне уже объяснили

Aliru
0 / 0 / 0
Регистрация: 07.05.2013
Сообщений: 83
20.07.2013, 10:44     Что? (оператор "," (запятая)) #12
Есть такой кусок кода
C++
1
(a<0) ? (b= false, cout << "false == b. Cycle's terminated.") : (b = true)
Выдает ошибку - но здесь я так понимаю запятая - это операция - вычисляется cout, а затем это значение не может преобразоваться в int(ну а оттуда в bool)
Я думал сделать так -
C++
1
(a<0) ? b= false, cout << "false == b. Cycle's terminated." : (b = true)
- так как здесь запятая это вроде бы точка следования (скобок нет, а в операторе ?: заяптая это точка следования)- та же ошибка.
Я знаю что запятые лучше не использовать - "одно действие в программе од*на строчка кода"
Но все таки интересно что здесь не так
C++
1
(cout << "The input've terminated", b = false )
- Так работает, хотя b = false и должно false cout-у присвоить?

Добавлено через 20 минут
Cейчас бегло просмотрел стандарт 11 - там вообще микропункт который очень мало объясняет
Croessmah
Модератор
Эксперт CЭксперт С++
13045 / 7308 / 814
Регистрация: 27.09.2012
Сообщений: 18,041
Записей в блоге: 3
Завершенные тесты: 1
20.07.2013, 10:53     Что? (оператор "," (запятая)) #13
Оператор запятая последовательно выполняет операнды и возвращает значение правого операнда.
Aliru
0 / 0 / 0
Регистрация: 07.05.2013
Сообщений: 83
20.07.2013, 11:11     Что? (оператор "," (запятая)) #14
Да, я это читал - и куда возвращает тогда значение
C++
1
cout << "false == b. Cycle's terminated."
Там же нет до этого а = (? : )
Croessmah
Модератор
Эксперт CЭксперт С++
13045 / 7308 / 814
Регистрация: 27.09.2012
Сообщений: 18,041
Записей в блоге: 3
Завершенные тесты: 1
20.07.2013, 11:18     Что? (оператор "," (запятая)) #15
Цитата Сообщение от Aliru Посмотреть сообщение
и куда возвращает тогда значение
а так:
C++
1
2
3
int main(){
   std::cout<<"Hello world";
}
куда возвращает значение?

Добавлено через 1 минуту
Цитата Сообщение от Aliru Посмотреть сообщение
а затем это значение не может преобразоваться в int(ну а оттуда в bool)
Зато может преобразоваться в void* ну или сразу в bool в C++11
Aliru
0 / 0 / 0
Регистрация: 07.05.2013
Сообщений: 83
20.07.2013, 11:27     Что? (оператор "," (запятая)) #16
Я думаю что это возвращает true в объект cout - ну или что-то наподобии. Как если вместо числа ввести строку то необходимо будет снимаь флаг ошибки - но честно это предположене только.
Я о Условие ?
C++
1
b= false, cout << "false == b. Cycle's terminated."
: (2й вариант) этом. Пишет что не может привести к типу int - но здесь же нет скобок - это должна быть точка следования
Croessmah
Модератор
Эксперт CЭксперт С++
13045 / 7308 / 814
Регистрация: 27.09.2012
Сообщений: 18,041
Записей в блоге: 3
Завершенные тесты: 1
20.07.2013, 11:42     Что? (оператор "," (запятая)) #17
распишем по другому эту строчку:
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
bool foo(int a,bool & b){
   if(a<0){
      b = false;
      return (std::cout << "false == b. Cycle's terminated.");
   }else{
      return (b = true);
   }
}
 
 
int main(){
    bool b;
    int a=6;
    foo(a,b);
}
Aliru
0 / 0 / 0
Регистрация: 07.05.2013
Сообщений: 83
20.07.2013, 11:58     Что? (оператор "," (запятая)) #18
Вернуло true, даже если а = -7; Здесь понятно(я так думаю)
Но я все равно о другом
C++
1
b = false, cout << "false == b. Cycle's terminated."
здесь вычисляется левый опреатор, а затем вычисляется правый и должно b присвоить true?
Выдает это
Error 2 error C2446: ':' : no conversion from 'int' to 'std::basic_ostream<_Elem,_Traits>' c:\users\Ruslan\documents\visual studio 2005\projects\8.14\8.14\8.14.cpp 41
Croessmah
Модератор
Эксперт CЭксперт С++
13045 / 7308 / 814
Регистрация: 27.09.2012
Сообщений: 18,041
Записей в блоге: 3
Завершенные тесты: 1
20.07.2013, 12:03     Что? (оператор "," (запятая)) #19
Цитата Сообщение от Aliru Посмотреть сообщение
здесь вычисляется левый опреатор, а затем вычисляется правый и должно b присвоить true?
так понятнее:
C++
1
2
b = (false, cout << "false == b. Cycle's terminated.")
(b = false), cout << "false == b. Cycle's terminated."
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
20.07.2013, 12:08     Что? (оператор "," (запятая))
Еще ссылки по теме:

Программерский сленг: что означает "кастомный" и "кастить"? - C++
что есть &quot;кастомный&quot; и &quot;кастить&quot; ?

Что происходит когда например "char* g="fdgag";"? - C++
Сабж. Я понял создается динамический массив с помощью malloc() и поэтому к нему не обратится таким образом: g. Я прав?

Дано натуральное число. Верно ли, что цифра "a" встречается в нем реже, чем цифра "b"? - C++
Дано натуральное число. Верно ли, что цифра a встречается в нем реже, чем цифра b. Заранее спасибо

Что применить "\n" или "endl"? - C++
Эти две операции похожи - они переходят на новую строку. Но endl очищает буфер, но при этом дольше выполняется. Так что же лучше...

Не компилируется, ошибки: "отсутствует оператор, соответствующий этим операндам" - C++
Помогите исправить ошибку, данные проект создавался в среде eclipse при переносе на VS 2010 стал выдавать ошибки при компиляции. Исправьте...


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

Или воспользуйтесь поиском по форуму:
taras atavin
Ушёл с форума.
3569 / 1752 / 91
Регистрация: 24.11.2009
Сообщений: 27,619
20.07.2013, 12:08     Что? (оператор "," (запятая)) #20
Цитата Сообщение от Aliru Посмотреть сообщение
Да, я это читал - и куда возвращает тогда значение
Это не паскаль, здесь допускается возврат значения вникуда.
Yandex
Объявления
20.07.2013, 12:08     Что? (оператор "," (запятая))
Ответ Создать тему
Опции темы

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