![]() |
Модераторы: Daevaorn |
![]() ![]() ![]() |
|
borisbn |
|
||||
![]() Эксперт ![]() ![]() ![]() ![]() Профиль Группа: Завсегдатай Сообщений: 4875 Регистрация: 6.2.2010 Где: Ростов-на-Дону Репутация: 22 Всего: 135 |
День добрый.
Интересует следующая ситуация:
не подскажите, где в стандарте (хотя бы раздел, дальше - я сам) сказано, что не-POD типы можно использовать как возвращаемое значение ф-ции в левой части выражения, а POD - нельзя. Спасибо. Компилятор MSVC 2008. P.S. проверил на LWS - получаю три ошибки - на все строки кроме
P.P.S. Наверное, всё-таки, не POD и nonPOD, а собственные и встроенные. Ну вы поняли, о чём я ![]() Это сообщение отредактировал(а) borisbn - 25.5.2011, 12:39 -------------------- Женщины отличаются от программистов тем, что у них чары состоят из стрингов |
||||
|
|||||
bsa |
|
|||
![]() Эксперт ![]() ![]() ![]() ![]() Профиль Группа: Модератор Сообщений: 9185 Регистрация: 6.4.2006 Где: Москва, Россия Репутация: 63 Всего: 196 |
borisbn, думаю, тебе надо читать про l-value и r-value в стандарте. Это к POD/nonPOD отношения не имеет.
думаю, стандартные типы возвращаются как const int. |
|||
|
||||
borisbn |
|
||||||
![]() Эксперт ![]() ![]() ![]() ![]() Профиль Группа: Завсегдатай Сообщений: 4875 Регистрация: 6.2.2010 Где: Ростов-на-Дону Репутация: 22 Всего: 135 |
Почитал. Единственное, что нашёл - это
Не факт, что это единственное, простоэто единственное, что я нашёл ![]()
Ввот это-то, как раз, и не понятно. В стандарте в разделе 3.10 ( Lvalues and rvalues ) вроде ничего такого не говорится. Разве что это
но тут про rvalues говорится... Наверное это отдано на откуп компилятора... что немного печалит :( -------------------- Женщины отличаются от программистов тем, что у них чары состоят из стрингов |
||||||
|
|||||||
borisbn |
|
|||
![]() Эксперт ![]() ![]() ![]() ![]() Профиль Группа: Завсегдатай Сообщений: 4875 Регистрация: 6.2.2010 Где: Ростов-на-Дону Репутация: 22 Всего: 135 |
OK, закрываю, хотя ответ не получил, но это, скорее всего, из-за того, что вопрос не задал...
как умная собака - понимаю, что хочу, но сказать не могу ![]() надо было перед тем, как создавать тему перечитать подпись bsa ![]() -------------------- Женщины отличаются от программистов тем, что у них чары состоят из стрингов |
|||
|
||||
mes |
|
|||
любитель ![]() ![]() ![]() ![]() Профиль Группа: Участник Клуба Сообщений: 7954 Регистрация: 14.1.2006 Репутация: 144 Всего: 250 |
||||
|
||||
borisbn |
|
|||
![]() Эксперт ![]() ![]() ![]() ![]() Профиль Группа: Завсегдатай Сообщений: 4875 Регистрация: 6.2.2010 Где: Ростов-на-Дону Репутация: 22 Всего: 135 |
mes, надеюсь Вы понимаете, что я хотел спросить, а то у меня не получается даже вопрос сформулировать... что хочу выяснить - знаю, а задать вопрос -
![]() -------------------- Женщины отличаются от программистов тем, что у них чары состоят из стрингов |
|||
|
||||
mes |
|
|||
любитель ![]() ![]() ![]() ![]() Профиль Группа: Участник Клуба Сообщений: 7954 Регистрация: 14.1.2006 Репутация: 144 Всего: 250 |
||||
|
||||
bsa |
|
|||
![]() Эксперт ![]() ![]() ![]() ![]() Профиль Группа: Модератор Сообщений: 9185 Регистрация: 6.4.2006 Где: Москва, Россия Репутация: 63 Всего: 196 |
Думаю, сформулировать можно так: почему с rvalue работает один ряд операций, но не работает другой. И вообще можно ли это или undefined behaviour.
|
|||
|
||||
volatile |
|
|||
![]() Эксперт ![]() ![]() ![]() ![]() Профиль Группа: Завсегдатай Сообщений: 2107 Регистрация: 7.1.2011 Репутация: 37 Всего: 85 |
Хм.., а вроде-бы ответ уже сам borisbn и привел.
Результалом вызова функции (для НЕ user defined типов), которая не возвращает ссылку - есть rvalue. А для юзер дефайнед типов, определяется собственно самим юзером через возвращаемый тип. (is determined by their parameter and return types) В данном случае S foo_S(); возвращает определенный юзером тип, и юзер определил что он не константный, сделовательно он lvalue. а int foo_int(); возвращает уже совсем не определенный юзером тип, и он подпадает под первую часть:
В общем ключевым здесь является не вопрос "POD/не-POD", а вопрос "User defined/не-User defined" Интуитивно я, по крайней мере, следую такому толкованию... Нет? |
|||
|
||||
borisbn |
|
||||||
![]() Эксперт ![]() ![]() ![]() ![]() Профиль Группа: Завсегдатай Сообщений: 4875 Регистрация: 6.2.2010 Где: Ростов-на-Дону Репутация: 22 Всего: 135 |
volatile, спасибо, Вы, как всегда, умеете чётко сформулировать вывод.
Насколько я понял, это, всё-таки, implementation defined, т.к. вот это
на студии компилится, а на gcc (LWS) - нет.
-------------------- Женщины отличаются от программистов тем, что у них чары состоят из стрингов |
||||||
|
|||||||
mes |
|
|||
любитель ![]() ![]() ![]() ![]() Профиль Группа: Участник Клуба Сообщений: 7954 Регистрация: 14.1.2006 Репутация: 144 Всего: 250 |
||||
|
||||
volatile |
|
||||
![]() Эксперт ![]() ![]() ![]() ![]() Профиль Группа: Завсегдатай Сообщений: 2107 Регистрация: 7.1.2011 Репутация: 37 Всего: 85 |
действительно
имхо, тоже недолжно. Вызывая огонь на себя фанов gcc, скажу что это очень похоже на глюк именно gcc. а я разве говорил что это не так? |
||||
|
|||||
borisbn |
|
|||
![]() Эксперт ![]() ![]() ![]() ![]() Профиль Группа: Завсегдатай Сообщений: 4875 Регистрация: 6.2.2010 Где: Ростов-на-Дону Репутация: 22 Всего: 135 |
нас двое на баррикадах ![]() -------------------- Женщины отличаются от программистов тем, что у них чары состоят из стрингов |
|||
|
||||
mes |
|
|||
любитель ![]() ![]() ![]() ![]() Профиль Группа: Участник Клуба Сообщений: 7954 Регистрация: 14.1.2006 Репутация: 144 Всего: 250 |
если юзер определил бы его константным, то он также был бы lvalue, только const lvalue, a не rvalue.. Добавлено через 1 минуту и 15 секунд т.е. lvalue/rvalue никак не зависят от указания юзером константности.. |
|||
|
||||
volatile |
|
|||
![]() Эксперт ![]() ![]() ![]() ![]() Профиль Группа: Завсегдатай Сообщений: 2107 Регистрация: 7.1.2011 Репутация: 37 Всего: 85 |
Этой фразой я хотел только сказать что если юзер определил что он не константный, сделовательно его можно поставить с левой части от знака присваивания. Но если рассматривать педантично, по критериям строгой терминологии С++, то mes, вы конечно-же, как всегда абсолютно правы. Тем не менее, надеюсь, все поняли что я хотел сказать. Это сообщение отредактировал(а) volatile - 28.5.2011, 23:51 |
|||
|
||||
![]() ![]() ![]() |
Правила форума "С++:Общие вопросы" | |
|
Добро пожаловать!
Если Вам понравилась атмосфера форума, заходите к нам чаще! С уважением, Earnest Daevaorn |
0 Пользователей читают эту тему (0 Гостей и 0 Скрытых Пользователей) | |
0 Пользователей: | |
« Предыдущая тема | C/C++: Общие вопросы | Следующая тема » |
|
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности Powered by Invision Power Board(R) 1.3 © 2003 IPS, Inc. |