Использование void в функциях без параметра?

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

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

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

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

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

Ответ 1

В С++

void f(void);

идентичен:

void f();

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

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

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

Пример:

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

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

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

Ответ 2

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

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

Ответ 3

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

Ответ 4

Я чувствую себя как нет. Причины:

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

Ответ 5

Как примечание. Еще одна причина не включать в себя пустоту в том, что программное обеспечение, такое как starUML, которое может читать код и генерировать диаграммы классов, читает пустоту как параметр. Несмотря на то, что это может быть недостатком в программном обеспечении для создания UML, все равно досадно возвращаться и удалять "void", если вы хотите иметь чистые диаграммы