Преобразование Lvalue в Rvalue - PullRequest
       19

Преобразование Lvalue в Rvalue

6 голосов
/ 18 сентября 2011

От 4,1 / 2

Значение, содержащееся в объекте, указанном lvalue, является Результат получен. Когда преобразование lvalue в rvalue происходит в пределах операнд sizeof (5.3.3) значение, содержащееся в ссылочном объекте не доступен, так как этот оператор не оценивает свой операнд.

Из любопытства, мне было интересно, относится ли то же самое к if, ибо, в то время как операторы, т. Е. Lvalue преобразуются в rvalue при оценке результата оператора?

Ответы [ 2 ]

7 голосов
/ 18 сентября 2011

Да.Без преобразования lvalue-to-rvalue он не может прочитать его значение .

Говоря в общих чертах, представьте себе lvalue как своего рода контейнер и rvalue в качестве значения, содержащегося в контейнере.

C ++ 03, раздел §3.10 / 7 гласит:

Всякий раз, когда значение lvalue появляется в контексте, где ожидается значение rvalue, значение lvalueпреобразуется в значение r;см. 4.1, 4.2 и 4.3.

Прочитайте его вместе с, §4.1 / 2 (ваша цитата),

Значение, содержащееся в объекте, обозначенном lvalueявляется результатом rvalue.

Тема по теме:

3 голосов
/ 18 сентября 2011

Ответ - да.

Когда ожидается значение bool, также применяется преобразование.Пусть test будет переменной, чтобы увидеть пример:

if( test )

R-значение теста, true или false, оценивается внутри if.

...