Здравствуйте, andrey.desman, Вы писали:
pva>>задам и я свой нубский вопрос: не завезли ли в с++ return void? AD>Так и не вывозили вроде...
Тьфу, и правда. Спасибо. С ходу не нагуглил, а проверить не удосужился.
Здравствуйте, Евгений Музыченко, Вы писали:
pva>> case Actions::A: return doActionA(); ЕМ>Я категорически против. Этак кто-нибудь захочет прибавить void, умножить на void...
Здорово, что ты не в комитете.
А такое, наверно, тебе вообще как соль на рану?
Здравствуйте, rg45, Вы писали:
R>чтоб при обобщенном подходе не приходилось обрабатывать функции, возвращающие void, особым случаем.
Без особых случаев все равно не обойтись. Даже если сделать универсальный шаблон с параметром T, возвращающий T, в нем без извращений не получится использовать любые операции со значениями типа T. И применять его без выделения особых случаев тоже не получится. Единственное, где все это получается без извращений — чисто "сквозной" вызов, а для него эта фича — просто синтаксический сахар.
То, что большинство не знает о наличии в языке этой фичи, лишний раз показывает, что ее ценность околонулевая.
Здравствуйте, Евгений Музыченко, Вы писали:
ЕМ>Без особых случаев все равно не обойтись. Даже если сделать универсальный шаблон с параметром T, возвращающий T, в нем без извращений не получится использовать любые операции со значениями типа T. И применять его без выделения особых случаев тоже не получится. Единственное, где все это получается без извращений — чисто "сквозной" вызов, а для него эта фича — просто синтаксический сахар.
Пожалей сову.
ЕМ>То, что большинство не знает о наличии в языке этой фичи, лишний раз показывает, что ее ценность околонулевая.
Тебе кто-то поручал делать заявления от имени БОЛЬШИНСТВА?
Здравствуйте, pva, Вы писали:
pva>Привет,
pva>задам и я свой нубский вопрос: не завезли ли в с++ return void?
Мало того, можно ещё в качестве параметра или результата null по ссылке передавать, разыменовывая null, предварительно кастанув его к нужному типу. Там любой указатель, с void не пробовал.
Здравствуйте, Евгений Музыченко, Вы писали:
ЕМ>То, что большинство не знает о наличии в языке этой фичи, лишний раз показывает, что ее ценность околонулевая.
Воинственное невежество опять вышло на тропу войны.
R>A return statement with an operand of type void shall be used only in a function that has a cv void return type.
R>Сделано так вполне осознанно, хотя бы для того, чтоб при обобщенном подходе не приходилось обрабатывать функции, возвращающие void, особым случаем.
Зачем это сделано, совершенно понятно. Но я не знал, что это в стандарт уже занесли. Кажется, в gcc это появилось, в качестве расширения, гораздо раньше стандарта...
Здравствуйте, Pzz, Вы писали:
R>>Сделано так вполне осознанно, хотя бы для того, чтоб при обобщенном подходе не приходилось обрабатывать функции, возвращающие void, особым случаем.
Pzz>Зачем это сделано, совершенно понятно. Но я не знал, что это в стандарт уже занесли. Кажется, в gcc это появилось, в качестве расширения, гораздо раньше стандарта...
Здравствуйте, Pzz, Вы писали:
Pzz>Зачем это сделано, совершенно понятно. Но я не знал, что это в стандарт уже занесли. Кажется, в gcc это появилось, в качестве расширения, гораздо раньше стандарта...
Да, твоя правда. У меня на компе собрана полная коллекция всех стандартов, начиная с C++98, я только что пробежался по всем от начала и вижу, что данная формулировка появилась только начиная с C++17. Выходит, что до этого эта фича шла на правах расширения, причем, не только в gcc, но и в msvc (и вероятно в других компилерах тоже). Мне даже запомнилось, что достаточно давно (лет десять назад, наверное) у меня был пост на РСДН, в котором я акцентировал внимание на этой возможности.
Здравствуйте, rg45, Вы писали:
R>Да, твоя правда. У меня на компе собрана полная коллекция всех стандартов, начиная с C++98, я только что пробежался по всем от начала и вижу, что данная формулировка появилась только начиная с C++17. Выходит, что до этого эта фича шла на правах расширения, причем, не только в gcc, но и в msvc (и вероятно в других компилерах тоже). Мне даже запомнилось, что достаточно давно (лет десять назад, наверное) у меня был пост на РСДН, в котором я акцентировал внимание на этой возможности.
2005 год.
3.9.1 Fundamental types
The void type has an empty set of values. The void type is an incomplete type that cannot be completed. 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 (5.4).
An expression of type void shall be used only as an expression statement (6.2), as an operand of a comma expression
(5.18), as a second or third operand of ?: (5.16), as the operand of typeid, or as the expression in a return statement
(6.6.3) for a function with the return type void.
6.6.3 The return statement [stmt.return]
3 A return statement with an expression of type “cv void” can be used only in functions with a return type of cv void; the
expression is evaluated just before the function returns to its caller.