Здравствуйте, Аноним, Вы писали:
А>Почему префиксная и постфиксная запись отличаются т.е. почему int* q=&(x++);
потому что & требует l-value
на пальцах: адрес вы можете узнать у объекта, которого вы держите (то есть у которого есть имя)
выражение ++x является l-value по стандарту, то есть возвращает тот же самый x и есть возможность взять у него адрес
выражение x++ является r-value, то бишь там возвращается временный объект, хранящий предыдущее значение x. а у временных объектов нет возможности взять адрес. вы же ими не владеете
можете сделать так:
int z = x++;
&z;
const int& t = x++;
&t; // <- адрес временного объекта :)))
напомню, что ++x возвращает ссылку на проинкременченный объект, а x++ инкрементит x, но возвращает его предыдущее значение (то есть возвращает его старую копию в виде временного (безымянного) объекта)), то есть если int x = 10;, то ++x вернет 11, а x++ вернет 10 (хотя в обоих случаях новое значение х будет равно 11)
Немного оффтопа: звездочка относится к переменной, а не к типу, поэтому "int* a,b" и "int *a,*b" означают не одно и то же
Поэтому гигиеничней писать так:
Здравствуйте, Mr.Delphist, Вы писали:
MD>Здравствуйте, Аноним, Вы писали: MD>
MD>int* q=&(x++);
MD>
MD>Немного оффтопа: звездочка относится к переменной, а не к типу, поэтому "int* a,b" и "int *a,*b" означают не одно и то же MD>Поэтому гигиеничней писать так: MD>
Здравствуйте, Mr.Delphist, Вы писали:
MD>Минусёры, ау! Аргументируем!
Мне смешно, как с оценок, так и с самого сообщения!
IMHO, это хорошая тема для КСВ, такая же, как tab vs space или там, сколько позиций в самом лучшем отступе
Все эмоциональные формулировки не соотвествуют действительному положению вещей и приведены мной исключительно "ради красного словца". За корректными формулировками и неискажённым изложением идей, следует обращаться к их автором или воспользоваться поиском
Здравствуйте, Mr.Delphist, Вы писали:
MD>Немного оффтопа: звездочка относится к переменной, а не к типу, поэтому "int* a,b" и "int *a,*b" означают не одно и то же
'*' менят тип, а не переменную. Значит она относится к типу.
MD>Поэтому гигиеничней писать так: MD>
MD>int *q=&(x++);
MD>
"Гигиенично" указать отдельно тип для каждой переменной при декларации. А значит писать надо так:
int* q = &i;
int** pp = &q;
потому, что ясно видно, что это объявление и '*' задаёт/модифицирует тип, а не переменную и это не присвоение, как здесь:
Здравствуйте, B0FEE664, Вы писали:
BFE>Здравствуйте, Mr.Delphist, Вы писали:
MD>>Немного оффтопа: звездочка относится к переменной, а не к типу, поэтому "int* a,b" и "int *a,*b" означают не одно и то же BFE>'*' менят тип, а не переменную. Значит она относится к типу.
MD>>Поэтому гигиеничней писать так: MD>>
MD>>int *q=&(x++);
MD>>
BFE>"Гигиенично" указать отдельно тип для каждой переменной при декларации. А значит писать надо так: BFE>
BFE>int* q = &i;
BFE>int** pp = &q;
BFE>
BFE>потому, что ясно видно, что это объявление и '*' задаёт/модифицирует тип, а не переменную и это не присвоение, как здесь: BFE>
BFE>*pp = &j;
BFE>
Думаю, что в грамматике правило будет выглядеть подобным образом (псевдо)
Здравствуйте, ollv, Вы писали:
O>Здравствуйте, B0FEE664, Вы писали:
O> Так, что синт.анализатор свернет раньше экпрешн с спецификатор + идентификатор , а после займется сверткой выражения вцелом. отдюда int *a —
кошернее
точнее
Здравствуйте, ollv, Вы писали:
O> Так, что синт.анализатор свернет раньше экпрешн с спецификатор + идентификатор , а после займется сверткой выражения вцелом. отдюда int *a — кошернее
Ага, халяльнее... Зачем синт(етическому)анализатору кошерный код ?
Текст программы, по возможности, пишется так, что бы было удобно человеку, а не анализатору. Иначе, все бы так и писали на ассемблере.
Здравствуйте, Erop, Вы писали:
E>Здравствуйте, Mr.Delphist, Вы писали:
MD>>Минусёры, ау! Аргументируем!
E>Мне смешно, как с оценок, так и с самого сообщения! E>IMHO, это хорошая тема для КСВ, такая же, как tab vs space или там, сколько позиций в самом лучшем отступе
Здравствуйте, Mr.Delphist, Вы писали:
E>>Мне смешно, как с оценок, так и с самого сообщения! E>>IMHO, это хорошая тема для КСВ, такая же, как tab vs space или там, сколько позиций в самом лучшем отступе
MD>Т.е. ты считаешь, что MD>
MD>int* a, b;
MD>
MD>описывает два указателя?
Там уже был ответ, с которым я полностью согласен.
1) Этот код ЛУЧШЕ оформлять так:
int* a;
int b;
2) Если кто-то оформляет код как-то иначе, то тоже ничего страшного
Ну и от себя добавлю, что программист, которому ТРУДНО читать код
int* a, b;
и который думает или, хотя бы, может подумать, что это два указателя профессионально непригоден...
Все эмоциональные формулировки не соотвествуют действительному положению вещей и приведены мной исключительно "ради красного словца". За корректными формулировками и неискажённым изложением идей, следует обращаться к их автором или воспользоваться поиском