В чем смысл определения пустоты в определении конструктора?
С учетом следующего кода:
#pragma once
class B
{
public:
B(void)
{
}
~B(void)
{
}
};
Я знаю, что я тоже могу написать это:
#pragma once
class B
{
public:
B()
{
}
~B()
{
}
};
Какова цель иметь void
в первом примере? Это какой-то тип практики, который утверждает, что конструктор принимает параметры нуль?
Ответы
Ответ 1
Оба одинаковы, по крайней мере, на С++. В C предоставление пустой пары круглых скобок обычно означает список неуказанных параметров (в отличие от пустого списка параметров). С++ не имеет этой проблемы.
Как правильно ответить на правильный ответ так много раз? Еще одна ошибка SO?
Ответ 2
Давным-давно вы сделали что-то подобное в C (мой pre-ISO C ржавый:)):
void foo(a, b)
int a,
int b
{
}
в то время как С++ создавался, для изменения имени требовались типы аргументов, поэтому для С++ он был изменен на:
void foo(int a, int b)
{
}
и это изменение было перенесено на C.
В этот момент я считаю, что не нарушать существующий код C:
void foo()
и это:
void foo(void)
означало две очень разные вещи, ()
означает, что вы не проверяете номер аргумента или тип, а (void)
означает, что не принимает аргументов. Для С++ ()
, означающего не проверять что-либо, не будет работать, поэтому ()
и (void)
означают то же самое в С++.
Итак, для С++ ()
и (void)
всегда были одно и то же.
По крайней мере, так я его помню...: -)
Ответ 3
afaik, если вы передадите пустоту в конструктор или какую-либо функцию в качестве аргумента, это означает, что функция dosnt принимает любой аргумент, поэтому пример a и b равны. но я не уверен, что какой-либо из них каким-либо образом меняет сигнатуру функции или ускоряет ее работу и т.д.
Ответ 4
Я просто хотел добавить, что, когда вы используете void после таких параметров, как function(): void, это означает, что функция не возвращает значение.