Использование void в функциях без параметра? - PullRequest
13 голосов
/ 03 марта 2012

В C ++ с использованием void в функции без параметров, например:

class WinMessage
{
public:
    BOOL Translate(void);
};

избыточно, вы можете просто написать Translate();.

Я, как правило, сам включаю его, поскольку это немного полезно, когда IDE, поддерживающие завершение кода, отображают void, так как это гарантирует, что функция определенно не принимает параметров.

Мой вопрос: является ли добавление void к функциям без параметров хорошей практикой? Следует ли поощрять это в современном коде?

Ответы [ 5 ]

21 голосов
/ 03 марта 2012

В C ++

void f(void);

идентичен:

void f();

Тот факт, что первый стиль все еще может быть юридически написан, можно отнести к C.
n3290 § C.1.7 (совместимость с C ++ и ISO C):

Изменение : В C ++ функция, объявленная с пустым списком параметров, не принимает аргументов.

InC, пустой список параметров означает, что число и тип аргументов функции неизвестны.

Пример:

int f(); // means int f(void) in C++
         // int f( unknown ) in C

В C имеет смысл избегать этого нежелательного "неизвестное значениеВ C ++ это лишнее.

Краткий ответ: в C ++ это похмелье от слишком большого программирования на C.Это ставит его в скобку «не делай этого, если тебе действительно не нужно» для C ++, на мой взгляд.

6 голосов
/ 03 марта 2012

Я не вижу абсолютно никаких причин для этого.Среды разработки просто завершат вызов функции пустым списком аргументов и на 4 символа меньше.

Лично я считаю, что это делает уже многословный C ++ еще более многословным.Я не знаю ни одной версии языка, требующей использования void здесь.

5 голосов
/ 03 марта 2012

Я думаю, что это поможет только в обратной совместимости со старым кодом C, в противном случае это избыточно.

3 голосов
/ 03 марта 2012

Я чувствую, что нет.Причины:

  • Гораздо больше кода имеет форму BOOL Translate(), поэтому другим, читающим ваш код, будет удобнее и продуктивнее.
  • Имея меньше на экране (особенно что-то избыточное, подобное этому) означает меньше мышления для того, кто читает ваш код.
  • Иногда люди, которые не программировали на C в 1988 году, спрашивают: «Что означает foo(void)
0 голосов
/ 28 февраля 2014

Так же, как примечание.Другая причина не включать void в то, что программное обеспечение, такое как starUML, может считывать код и генерировать диаграммы классов, считывать void как параметр.Несмотря на то, что это может быть недостатком в ПО для генерации UML, все еще раздражает необходимость вернуться назад и удалить «пустоты», если вы хотите иметь чистые диаграммы

...