Аргументы по умолчанию C ++ для всех существующих параметров - PullRequest
0 голосов
/ 07 мая 2020

Я ищу пример кода, который показывает, что есть некоторые типы параметров, которым нельзя присвоить аргументы по умолчанию. Я имею в виду, я хочу опровергнуть утверждение «Вы можете определить аргумент по умолчанию для каждого параметра в функции», или, действительно ли это правда?

Ответы [ 2 ]

2 голосов
/ 07 мая 2020

Это может быть слишком угловым случаем, но вы не можете указать значение по умолчанию для пакетов параметров:

template <typename... Args>
void foo(Args... = 5) {};  //fails to compile
1 голос
/ 07 мая 2020

Другой угловой случай - для неконструируемого класса (но функция также не может быть вызвана обычным способом):

struct S{
    S() = delete;
    S(const S&) = delete;
};

void foo(S = {}); // Wrong

Мы могли бы попытаться расширить это с помощью видимости, используя идиому ключа доступа, что действительно запретит объявление с параметром по умолчанию в некоторых местах, но мы можем (повторно) объявить функцию (с параметром по умолчанию) в области функции, где будет доступно создание ключа ...

...