Что означает наличие пустоты в определении конструктора? - PullRequest
16 голосов
/ 29 марта 2009

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

#pragma once

class B
{
public:

    B(void)
    {
    }

    ~B(void)
    {
    }
};

Я знаю, что тоже могу написать:

#pragma once

class B
{
public:

    B()
    {
    }

    ~B()
    {
    }
};

Какова цель иметь void в первом примере? Это какой-то тип практики, который утверждает, что конструктор принимает ноль параметров?

Ответы [ 4 ]

36 голосов
/ 29 марта 2009

Два одинаковы, по крайней мере, в C ++. В C предоставление пустой пары круглых скобок обычно означает неопределенный список параметров (в отличие от пустого списка параметров). C ++ не имеет этой проблемы.

Как правильному ответу можно так часто отказываться? Еще одна SO ошибка?

8 голосов
/ 29 марта 2009

Давным-давно вы сделали что-то подобное в C (мой pre-ISO C ржавый :)):

void foo(a, b)
   int a, 
   int b
{
}

во время создания C ++ для искажения имени требовались типы аргументов, поэтому для C ++ оно было изменено на:

void foo(int a, int b)
{
}

и это изменение было перенесено на C.

На данный момент, я полагаю, чтобы не нарушать существующий код C, это:

void foo() 

и это:

void foo(void)

означает две совершенно разные вещи, () означает не проверять номер аргумента или тип , а (void) означает, что не принимает аргументов . Для C ++ () значение ничего не проверять не сработает, поэтому () и (void) означают то же самое в C ++.

Итак, для C ++ () и (void) всегда были одинаковыми.

По крайней мере, так я это помню ...: -)

0 голосов
/ 07 апреля 2009

Я просто хотел добавить, что когда вы используете void после таких параметров, как function (): void, это используется для указания того, что функция не возвращает значение.

0 голосов
/ 29 марта 2009

afaik, если вы передаете void в конструктор или любую функцию в качестве аргумента, это означает, что функция не принимает никакого аргумента, поэтому примеры a и b равны. но я не уверен, что любой из них изменит сигнатуру функции или заставит ее работать быстрее и т. д.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...