Использование 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", если вы хотите иметь чистые диаграммы