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

Сообщение Re[22]: Зачем плюс? от 23.12.2018 18:26

Изменено 23.12.2018 18:27 rg45

Re[22]: Зачем плюс?
R>Здравствуйте, Максим Рогожин, Вы писали:

МР>>Кстати, а вот тип void что из вышеперечисленного описывает? Объектов типа void нету, вроде как.


R>Вот тут не уверен. Вот, что говорит стандарт:


R>

R>6.9.1. Fundamental types
R>9 A type cv void is an incomplete type that cannot be completed; such a type has an empty set of values. It is used as the return type for functions that do not return a value. Any expression can be explicitly converted to type cv void (8.4). An expression of type cv void shall be used only as an expression statement (9.2), as an operand of a comma expression (8.19), as a second or third operand of ?: (8.16), as the operand of typeid, noexcept, or decltype, as the expression in a return statement (9.6.3) for a function with the return type cv void, or as the operand of an explicit conversion to type cv void.


R>Но точно не ссылка и не функция. Либо он относится к объектным типам и имеет тот же статус, что и неполные типы объеков, с тем лищь отличием, что void не может стать полным в принципе. Либо вообще это отдельный тип. Но, исходя из того, что void не упомянут в 6.9, как специальный случай, выходит, что его следует относить к объектным типам, все-таки.


Еще такое соображение в ползу того, что void — объектный тип. Указатель на любой объект может быть приведен к cv void*, а указатель на функцию не может. Ну а на ссылку void вообще не похож, ни по каким критериям. Поэтому выходит, что объектный.
Re[22]: Зачем плюс?
R>Здравствуйте, Максим Рогожин, Вы писали:

МР>>Кстати, а вот тип void что из вышеперечисленного описывает? Объектов типа void нету, вроде как.


R>Вот тут не уверен. Вот, что говорит стандарт:


R>

R>6.9.1. Fundamental types
R>9 A type cv void is an incomplete type that cannot be completed; such a type has an empty set of values. It is used as the return type for functions that do not return a value. Any expression can be explicitly converted to type cv void (8.4). An expression of type cv void shall be used only as an expression statement (9.2), as an operand of a comma expression (8.19), as a second or third operand of ?: (8.16), as the operand of typeid, noexcept, or decltype, as the expression in a return statement (9.6.3) for a function with the return type cv void, or as the operand of an explicit conversion to type cv void.


R>Но точно не ссылка и не функция. Либо он относится к объектным типам и имеет тот же статус, что и неполные типы объеков, с тем лищь отличием, что void не может стать полным в принципе. Либо вообще это отдельный тип. Но, исходя из того, что void не упомянут в 6.9, как специальный случай, выходит, что его следует относить к объектным типам, все-таки.


Еще такое соображение в пользу того, что void — объектный тип. Указатель на любой объект может быть приведен к cv void*, а указатель на функцию не может. Ну а на ссылку void вообще не похож, ни по каким критериям. Поэтому выходит, что только объектный.