Я объявил объявление функции C++ с тремя аргументами, два из которых имели значения по умолчанию.Компилятор C++ не предупреждает о недостающем аргументе до конца аргументов по умолчанию
void func(int const n, bool const flag=true, int *array=NULL) {
/* print contents of array */
}
Когда я вызове функции ошибочно, опуская второй аргумент, но в том числе и третий аргумент, как так
int array[5]={1,2,3,4,5};
func(5,array);
ни GCC, ни Intel компиляторов (те, по умолчанию на Ubuntu 14.04 LTS) жаловались, что последний аргумент был указан без указания второй последней. Код запущен, но отправлен в NULL для массива (я ожидал, что код завершится с ошибкой).
Мой вопрос, почему не составителям жалуются, что не может найти функцию согласования с момента подписания моего вызова должен был появиться в
funct(int const, int *)
Какие варианты можно включить во время компиляции, чтобы вызвать предупреждение об этом ошибочном использовании?
Вы должны включить «крик оценщика кода на вас для добавления аргументов по умолчанию» warning :) – CoryKramer
Нет никакого предупреждения, о котором я знаю. Array-> pointer-> bool - отлично определенная последовательность преобразований. – chris
Это очень упрощенный, но репрезентативный пример, построенный из гораздо более сложного кода, где, если бы я избегал аргументов со значениями по умолчанию, у меня было бы так много перегруженных функций для всех вариантов, которые были бы довольно громоздкими. – raovgarimella