х=1,у=1; Теперь можно присваивать через запятую ?
От: Аноним  
Дата: 26.05.04 09:53
Оценка:
С детства мне вдолбили что:

int x=1,y=1; // правильно,а
int x,y;
x=1;y=1; //здесь через ";"


Сегодня при копировании блока вычислений, случайно получилось

int x=1,y=1;

//вырезано

x=1,y=1; // int-то я заметил,а запятую пропустил

VS C++ v6.0 пропустил без проблем, все работает.Возникает риторический вопрос: как-так ?
Re: х=1,у=1; Теперь можно присваивать через запятую ?
От: Vamp Россия  
Дата: 26.05.04 09:54
Оценка:
Читай книги про операцию "запятая".
Да здравствует мыло душистое и веревка пушистая.
Re: х=1,у=1; Теперь можно присваивать через запятую ?
От: Lorenzo_LAMAS  
Дата: 26.05.04 09:55
Оценка:
Можно написать x = 1; y = 2;

А можно написать x = 1, y = 2;

В первом случае у тебя два expression-statement'а, во втором один, и в нем есть выражение с оператором — запятой.
Of course, the code must be complete enough to compile and link.
Re: х=1,у=1; Теперь можно присваивать через запятую ?
От: Bell Россия  
Дата: 26.05.04 09:59
Оценка:
Здравствуйте, Аноним, Вы писали:

Всегда было можно. Подробнее смотри 5.18. Вот пример оттуда:

...
f(a, (t=3, t+2), c);
has three arguments, the second of which has the value 5. ]
Любите книгу — источник знаний (с) М.Горький
Re: х=1,у=1; Теперь можно присваивать через запятую ?
От: jazzer Россия Skype: enerjazzer
Дата: 26.05.04 10:03
Оценка:
Здравствуйте, Аноним, Вы писали:

А>С детства мне вдолбили что:


А>
А>int x=1,y=1; // правильно,а
А>int x,y;
А>x=1;y=1; //здесь через ";"
А>


А>Сегодня при копировании блока вычислений, случайно получилось


А>
А>int x=1,y=1;

А>//вырезано

А>x=1,y=1; // int-то я заметил,а запятую пропустил 
А>

А>VS C++ v6.0 пропустил без проблем, все работает.Возникает риторический вопрос: как-так ?

можно писать даже еще страшнее: :)
int x, y, tmp;
for (x=1,y=1000; y; x++, y--)
{
   tmp = arr1[y], arr1[y] = arr2[x], arr2[x] = tmp;
}
jazzer (Skype: enerjazzer) Ночная тема для RSDN
Автор: jazzer
Дата: 26.11.09

You will always get what you always got
  If you always do  what you always did
Re[2]: х=1,у=1; Теперь можно присваивать через запятую ?
От: Lorenzo_LAMAS  
Дата: 26.05.04 10:08
Оценка: :)
Оффтоп
Можно писать даже страшнее

for(class A{int i_; int j_;A(){std::cout<<"KyKy\n";}};;);
Of course, the code must be complete enough to compile and link.
Re: х=1,у=1; Теперь можно присваивать через запятую ?
От: NoFate Россия  
Дата: 26.05.04 12:16
Оценка:
Здравствуйте, <Аноним>, Вы писали:

А>VS C++ v6.0 пропустил без проблем, все работает.Возникает риторический вопрос: как-так ?


Запятая — это, по сути, ещё одна операция. Результат этой операции (точнее операций, так как может быть несколько выражений через запятые) — значение последнего выражения после выполенения всех выражений, разделённых запятыми, слева направо. То есть такой код:
int i, j;
j = (i = 3, i++, i*=2);
cout << j << endl;

выведет 8.

Кстати, ещё можно делать так:
i = j = 2;

Не в тему, конечно, но может пригодится...
... << RSDN@Home 1.1.3 stable silent>>
Re[3]: х=1,у=1; Теперь можно присваивать через запятую ?
От: ilya_ny  
Дата: 26.05.04 12:21
Оценка:
Здравствуйте, Lorenzo_LAMAS, Вы писали:

L_L>Оффтоп

L_L>Можно писать даже страшнее
L_L>
L_L>for(class A{int i_; int j_;A(){std::cout<<"KyKy\n";}};;);
L_L>


тоже offtopic
я хоть и люблю C++ но не могу не признать, что сам язык с точки зрения понимания просто ужасен
можно создать чудовищные конструкции и кто-то другой будет долго думать что-же это такое
Re[4]: х=1,у=1; Теперь можно присваивать через запятую ?
От: Lorenzo_LAMAS  
Дата: 26.05.04 12:27
Оценка:
_>тоже offtopic
_>я хоть и люблю C++ но не могу не признать, что сам язык с точки зрения понимания просто ужасен
_>можно создать чудовищные конструкции и кто-то другой будет долго думать что-же это такое

эээ, так если нарочно не изощряться (допустим, определяя дикие типы функций без тайпдефов), то вроде все нормально. А в учебниках — вообще все мило.
Of course, the code must be complete enough to compile and link.
Re[2]: х=1,у=1; Теперь можно присваивать через запятую ?
От: Аноним  
Дата: 26.05.04 14:17
Оценка:
Здравствуйте, jazzer, Вы писали:

J>можно писать даже еще страшнее:

J>
J>int x, y, tmp;
J>for (x=1,y=1000; y; x++, y--)
J>{
J>   tmp = arr1[y], arr1[y] = arr2[x], arr2[x] = tmp;
J>}
J>


можно еще страшнее


int a[5] = {1, 2, 3, 4, 5};
int i = 1;
int j = 3;
int k = 4;
cout << a[i, j, k];


что получим?
Re[3]: х=1,у=1; Теперь можно присваивать через запятую ?
От: Lorenzo_LAMAS  
Дата: 26.05.04 14:18
Оценка:
А>что получим?

'cout' undefined identifier ???
Of course, the code must be complete enough to compile and link.
Re[4]: х=1,у=1; Теперь можно присваивать через запятую ?
От: Vamp Россия  
Дата: 26.05.04 14:22
Оценка:
L_L>'cout' undefined identifier ???
Ну совсем необязательно.
Там может быть как using namespace std так и include <iostream.h>
Да здравствует мыло душистое и веревка пушистая.
Re[3]: х=1,у=1; Теперь можно присваивать через запятую ?
От: jazzer Россия Skype: enerjazzer
Дата: 26.05.04 14:55
Оценка:
Здравствуйте, Lorenzo_LAMAS, Вы писали:

L_L>Оффтоп :)))

L_L>Можно писать даже страшнее

L_L>
L_L>for(class A{int i_; int j_;A(){std::cout<<"KyKy\n";}};;);
L_L>


суть не в том, что страшнее, а в том, что есть места, где требуется ровно одно выражение (типа того же for), а хочется исполнить 2 и более:
for (x=1,y=1000;
     cerr << "\ny сейчас " << y, y;
     x++, y--)
{
......
}

вот тут на помощь и приходит оператор запятая.

Ну, и не забываем о том, что этот оператор можно перегрузить и потом всех им пугать :)
jazzer (Skype: enerjazzer) Ночная тема для RSDN
Автор: jazzer
Дата: 26.11.09

You will always get what you always got
  If you always do  what you always did
Re[4]: х=1,у=1; Теперь можно присваивать через запятую ?
От: Аноним  
Дата: 26.05.04 15:01
Оценка:
Здравствуйте, Lorenzo_LAMAS, Вы писали:

А>>что получим?


L_L>'cout' undefined identifier ???


#include <iostream>
using namespace std;

int main()
{
    int a[5] = {1, 2, 3, 4, 5};
    int i = 1;
    int j = 3;
    int k = 4;
    cout << a[i, j, k] << endl;
    return 0;
}

если угодно
вопрос-то был про запятую...
Re[3]: х=1,у=1; Теперь можно присваивать через запятую ?
От: BArt  
Дата: 27.05.04 05:35
Оценка:
Здравствуйте, Аноним, Вы писали:

А>
А>int a[5] = {1, 2, 3, 4, 5};
А>int i = 1;
А>int j = 3;
А>int k = 4;
А>cout << a[i, j, k];
А>


А>что получим?


a[i, j, k] то-же самое что и a[k], берется результат поледнего вычисления
чтоб еще запутать можно написать что-то вроде

cout  << a[++i, j+1, (k = j+2)]
Re[4]: х=1,у=1; Теперь можно присваивать через запятую ?
От: Аноним  
Дата: 27.05.04 06:21
Оценка:
J>Ну, и не забываем о том, что этот оператор можно перегрузить и потом всех им пугать

Да, Бьярн вроде в DE писал, что ',' добавили постолько поскольку. И она никому не нужна перегруженная. А тут недавно на форуме кто-то что-то интересное и действительно нужное с запятой делал.
Re[5]: х=1,у=1; Теперь можно присваивать через запятую ?
От: jazzer Россия Skype: enerjazzer
Дата: 27.05.04 12:46
Оценка:
Здравствуйте, Аноним, Вы писали:

J>>Ну, и не забываем о том, что этот оператор можно перегрузить и потом всех им пугать :)


А>Да, Бьярн вроде в DE писал, что ',' добавили постолько поскольку. И она никому не нужна перегруженная. А тут недавно на форуме кто-то что-то интересное и действительно нужное с запятой делал.


поскольку запятая в естественных языках используется для перечисления элементов, то и в С++ ее надо перегружать так же, как и, скажем, operator<<, который тоже образует цепочки.
Т.е. для некоторых типов T и U
T& operator,(T& t, U u);

Тогда, скажем, для U=int и какого-нть T=fill_vector (который будет заполнять свой внутренний std:vector<int> и будет иметь оператор приведения к std::vector<int>), можно будет написать нечто вроде
std::vector<int> our_vector = (fill_vector(), 0, 1, 2, 3, 5, 132, 54545, 234343, 45454, 65656);


Но, имхо, лучше это делать при помощи operator<<, который внутри себя просто будет делать push_back? как-то привычнее будет выглядеть:
std::vector<int>& operator<<(std::vector<int>& v, int i)
{
   v.push_back(i);
   return v;
}
void f()
{
   std::vector<int> vec;
   vec << 0 << 1 << 2 << 3 << 5 << 132 << 54545 << 234343 << 45454 << 65656;
}
jazzer (Skype: enerjazzer) Ночная тема для RSDN
Автор: jazzer
Дата: 26.11.09

You will always get what you always got
  If you always do  what you always did
 
Подождите ...
Wait...
Пока на собственное сообщение не было ответов, его можно удалить.