Информация об изменениях

Сообщение Re[23]: Зачем плюс? от 28.11.2018 16:10

Изменено 28.11.2018 16:34 N. I.

Re[23]: Зачем плюс?
B0FEE664:

BFE>Здравствуйте, N. I., Вы писали:


BFE>>>Вы меня уверяете, что rvalue — это тип выражения. Так?

NI>>Ткни пальцем, где я такое говорил?
BFE>σ писал, что rvalue — это класс выражений.

Под классом выражений он явно не имел в виду тип выражения.

BFE>>>Если так, то вы хотите сказать, что ссылка привязывается (bind) к выражению, а не к объекту?

NI>>Binding to an expression — это неформальная фигура речи, обозначающая привязку к объекту или функции, что является результатом данного expression.

BFE>Ну, тогда я повторю свой вопрос: какой тип у объекта полученного в результате вычисления rvalue?


Зависит от rvalue и версии стандарта. В случае C++11/14 prvalue скалярного типа (например, int) результирующего объекта вообще нет. Например, литерал 42 вычисляется в pure value, для которого никаких объектов не создаётся. Если таким prvalue инициализируется ссылка, то временный объект создаётся в контексте её инициализации (самому же prvalue при этом никаких объектов не сопоставляется).

В случае C++17 prvalue скалярного типа может иметь результирующий объект, а может и не иметь, в зависимости от контекста. У prvalue типа void результирующего объекта не может в принципе.
Re[23]: Зачем плюс?
B0FEE664:

BFE>Здравствуйте, N. I., Вы писали:


BFE>>>Вы меня уверяете, что rvalue — это тип выражения. Так?

NI>>Ткни пальцем, где я такое говорил?
BFE>σ писал, что rvalue — это класс выражений.

Под классом выражений он явно не имел в виду тип выражения.

BFE>>>Если так, то вы хотите сказать, что ссылка привязывается (bind) к выражению, а не к объекту?

NI>>Binding to an expression — это неформальная фигура речи, обозначающая привязку к объекту или функции, что является результатом данного expression.

BFE>Ну, тогда я повторю свой вопрос: какой тип у объекта полученного в результате вычисления rvalue?


Зависит от rvalue и версии стандарта. В случае C++11/14 у prvalue скалярного типа (например, int) результирующего объекта вообще нет. Например, литерал 42 вычисляется в pure value, для которого никаких объектов не создаётся. Если таким prvalue инициализируется ссылка, то временный объект создаётся в контексте её инициализации (самому же prvalue при этом никаких объектов не сопоставляется).

В случае C++17 prvalue скалярного типа может иметь результирующий объект, а может и не иметь, в зависимости от контекста. У prvalue типа void результирующего объекта не может в принципе.