В чем смысл определения пустоты в определении конструктора?

С учетом следующего кода:

#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, это означает, что функция не возвращает значение.