предупреждение компилятора на (неоднозначном) разрешении метода с именованными параметрами

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

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

public void Foo(int arg) { ... }

public void Foo(int arg, bool bar = true) { ...} 

Foo(42); // shouldn't this give a compiler warning?

Я думаю, что предупреждение компилятора было бы довольно интуитивно здесь. Хотя код технически является чистым (является ли это саунд-дизайном, другой вопрос:)).

6
задан FireSnake 17 April 2010 в 09:34
поделиться

2 ответа

На самом деле я не согласен с тем, что для этого нужно предупреждение. Основная проблема заключается в том, что этот код является потенциально легитимным, и в этом случае вам придется явно отключить предупреждение.

Я имею в виду, что, как правило, когда вы получаете предупреждение, вы можете изменить свой код, чтобы избавиться от предупреждения (и, по-видимому, в то же время улучшить код). Но в этом случае, возможно, вы сделали это намеренно и не сможете изменить свой код, чтобы избавиться от предупреждения.

Например, предупреждение «недостижимый код» - это то, что вы можете просто удалить, чтобы избавиться от предупреждения.Или предупреждение «не удалось найти ссылку» - обычно это сигнал о том, что вы получите ошибку «неопределенного типа», но в противном случае вы можете просто удалить ссылку. Или, может быть, предупреждение «Предыдущее предложение catch уже перехватывает все исключения»: в этом случае вам нужно изменить свой код так, чтобы либо новое предложение было перед универсальным, либо полностью удалить его.

Но дело в том, что в каждом случае, когда вы получаете предупреждение, вы должны изменить свой код, и внесение изменений всегда приведет к «лучшему» коду. Однако в случае этого вопроса вызов не является двусмысленным (что касается компилятора), и я не думаю, что вы можете утверждать, что писать такой код всегда - ошибка, поэтому поэтому предупреждения быть не должно.

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

1
ответ дан 17 December 2019 в 20:30
поделиться

Предупреждения предназначены для уведомления программистов о потенциально глупых ошибках. Это область, которая может вызвать глупую ошибку, поэтому да, она должна генерировать предупреждение. Вы пытаетесь подать петицию?

1
ответ дан 17 December 2019 в 20:30
поделиться
Другие вопросы по тегам:

Похожие вопросы: