return void
От: pva  
Дата: 13.06.23 15:28
Оценка:
Привет,

задам и я свой нубский вопрос: не завезли ли в с++ return void?
Ну, чтобы наконец-то вроде такого
void doActionA() {}
void doActionB() {}

void dispatch(Actions action) {
  switch (action) {
     case Actions::A: return doActionA();
     case Actions::B: return doActionB();
  }
}
newbie
Re: return void
От: andrey.desman Россия  
Дата: 13.06.23 15:34
Оценка: 3 (1) +6 :))
Здравствуйте, pva, Вы писали:

pva>задам и я свой нубский вопрос: не завезли ли в с++ return void?


Так и не вывозили вроде...
Re[2]: return void
От: pva  
Дата: 13.06.23 15:47
Оценка:
Здравствуйте, andrey.desman, Вы писали:

pva>>задам и я свой нубский вопрос: не завезли ли в с++ return void?

AD>Так и не вывозили вроде...
Тьфу, и правда. Спасибо. С ходу не нагуглил, а проверить не удосужился.
newbie
Re: return void
От: Евгений Музыченко Франция https://software.muzychenko.net/ru
Дата: 13.06.23 17:59
Оценка: :))) :))) :)
Здравствуйте, pva, Вы писали:

pva> case Actions::A: return doActionA();


Я категорически против. Этак кто-нибудь захочет прибавить void, умножить на void...
Re[2]: return void
От: rg45 СССР  
Дата: 13.06.23 18:19
Оценка: +3
Здравствуйте, Евгений Музыченко, Вы писали:

ЕМ>Я категорически против. Этак кто-нибудь захочет прибавить void, умножить на void...


Ну, напиши в Спортлото.
--
Re[2]: return void
От: pva  
Дата: 13.06.23 19:43
Оценка: +1
Здравствуйте, Евгений Музыченко, Вы писали:

pva>> case Actions::A: return doActionA();

ЕМ>Я категорически против. Этак кто-нибудь захочет прибавить void, умножить на void...
Здорово, что ты не в комитете.
А такое, наверно, тебе вообще как соль на рану?
int A() { return 0; }

void B() {
  return (void) A();
}

bool C() {
  return B(), true;
}
newbie
Re[3]: return void
От: Евгений Музыченко Франция https://software.muzychenko.net/ru
Дата: 13.06.23 19:55
Оценка: +1
Здравствуйте, pva, Вы писали:

pva>такое, наверно, тебе вообще как соль на рану?


Оно просто ни к чему.
Re: return void
От: Pzz Россия https://github.com/alexpevzner
Дата: 13.06.23 23:57
Оценка:
Здравствуйте, pva, Вы писали:

pva>задам и я свой нубский вопрос: не завезли ли в с++ return void?


Это расширение gcc. Причем какое-то довольно давнишнее.
Re[2]: return void
От: rg45 СССР  
Дата: 14.06.23 07:06
Оценка: +4
Здравствуйте, Pzz, Вы писали:

Pzz>Это расширение gcc. Причем какое-то довольно давнишнее.


Никакое это не расширение, не нужно выдумывать:

https://timsong-cpp.github.io/cppwp/stmt.return#2

A return statement with an operand of type void shall be used only in a function that has a cv void return type.


Сделано так вполне осознанно, хотя бы для того, чтоб при обобщенном подходе не приходилось обрабатывать функции, возвращающие void, особым случаем.
--
Re[3]: return void
От: Евгений Музыченко Франция https://software.muzychenko.net/ru
Дата: 14.06.23 07:17
Оценка: +1
Здравствуйте, rg45, Вы писали:

R>чтоб при обобщенном подходе не приходилось обрабатывать функции, возвращающие void, особым случаем.


Без особых случаев все равно не обойтись. Даже если сделать универсальный шаблон с параметром T, возвращающий T, в нем без извращений не получится использовать любые операции со значениями типа T. И применять его без выделения особых случаев тоже не получится. Единственное, где все это получается без извращений — чисто "сквозной" вызов, а для него эта фича — просто синтаксический сахар.

То, что большинство не знает о наличии в языке этой фичи, лишний раз показывает, что ее ценность околонулевая.
Re[4]: return void
От: rg45 СССР  
Дата: 14.06.23 07:18
Оценка: +1
Здравствуйте, Евгений Музыченко, Вы писали:

ЕМ>Без особых случаев все равно не обойтись. Даже если сделать универсальный шаблон с параметром T, возвращающий T, в нем без извращений не получится использовать любые операции со значениями типа T. И применять его без выделения особых случаев тоже не получится. Единственное, где все это получается без извращений — чисто "сквозной" вызов, а для него эта фича — просто синтаксический сахар.


Пожалей сову.

ЕМ>То, что большинство не знает о наличии в языке этой фичи, лишний раз показывает, что ее ценность околонулевая.


Тебе кто-то поручал делать заявления от имени БОЛЬШИНСТВА?
--
Отредактировано 14.06.2023 7:21 rg45 . Предыдущая версия .
Re[5]: return void
От: Евгений Музыченко Франция https://software.muzychenko.net/ru
Дата: 14.06.23 07:23
Оценка:
Здравствуйте, rg45, Вы писали:

R>Тебе кто-то поручал делать заявления от имени БОЛЬШИНСТВА?


Ну давайте посчитаем, кто из здешних знал об этой особенности до того, как ТС поднял вопрос.
Re: return void
От: Maniacal Россия  
Дата: 14.06.23 07:25
Оценка:
Здравствуйте, pva, Вы писали:

pva>Привет,


pva>задам и я свой нубский вопрос: не завезли ли в с++ return void?


Мало того, можно ещё в качестве параметра или результата null по ссылке передавать, разыменовывая null, предварительно кастанув его к нужному типу. Там любой указатель, с void не пробовал.
Re[6]: return void
От: rg45 СССР  
Дата: 14.06.23 07:29
Оценка: +2 :)
Здравствуйте, Евгений Музыченко, Вы писали:

ЕМ>Ну давайте посчитаем, кто из здешних знал об этой особенности до того, как ТС поднял вопрос.


Вот ты бы посчитал сперва, а потом бы уже делал заявления. У тебя же телега впереди лошади, как обычно.
--
Re[6]: Че ты лыбишься?
От: rg45 СССР  
Дата: 14.06.23 07:35
Оценка: :)
Ты завления делаешь, тебе и за базар отвечать. Как ты это будешь делать — считать, или рисовать — это твое дело, мне фиолетово.
--
Re[4]: return void
От: serg_joker Украина  
Дата: 14.06.23 16:30
Оценка: +6 :))
Здравствуйте, Евгений Музыченко, Вы писали:

ЕМ>То, что большинство не знает о наличии в языке этой фичи, лишний раз показывает, что ее ценность околонулевая.

Воинственное невежество опять вышло на тропу войны.
Re[3]: return void
От: Pzz Россия https://github.com/alexpevzner
Дата: 15.06.23 11:08
Оценка: +1
Здравствуйте, rg45, Вы писали:

R>

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 это появилось, в качестве расширения, гораздо раньше стандарта...
Re[4]: return void
От: пффф  
Дата: 15.06.23 11:25
Оценка:
Здравствуйте, Pzz, Вы писали:

R>>Сделано так вполне осознанно, хотя бы для того, чтоб при обобщенном подходе не приходилось обрабатывать функции, возвращающие void, особым случаем.


Pzz>Зачем это сделано, совершенно понятно. Но я не знал, что это в стандарт уже занесли. Кажется, в gcc это появилось, в качестве расширения, гораздо раньше стандарта...


Емнип, всегда было, и в сишечке тоже
https://gcc.godbolt.org/z/o4Yfx3Gvr
Re[4]: return void
От: rg45 СССР  
Дата: 15.06.23 12:13
Оценка:
Здравствуйте, Pzz, Вы писали:

Pzz>Зачем это сделано, совершенно понятно. Но я не знал, что это в стандарт уже занесли. Кажется, в gcc это появилось, в качестве расширения, гораздо раньше стандарта...


Да, твоя правда. У меня на компе собрана полная коллекция всех стандартов, начиная с C++98, я только что пробежался по всем от начала и вижу, что данная формулировка появилась только начиная с C++17. Выходит, что до этого эта фича шла на правах расширения, причем, не только в gcc, но и в msvc (и вероятно в других компилерах тоже). Мне даже запомнилось, что достаточно давно (лет десять назад, наверное) у меня был пост на РСДН, в котором я акцентировал внимание на этой возможности.
--
Re[5]: return void
От: andrey.desman Россия  
Дата: 15.06.23 12:23
Оценка: 8 (1) :)
Здравствуйте, 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.

Отредактировано 15.06.2023 12:29 andrey.desman . Предыдущая версия . Еще …
Отредактировано 15.06.2023 12:27 andrey.desman . Предыдущая версия .
Подождите ...
Wait...
Пока на собственное сообщение не было ответов, его можно удалить.