Операторы if
действительно то же самое, но проблема с вашим кодом в том, что если x
не равно y
, он ничего не может вернуть. И, честно говоря, этот код не должен компилироваться, поскольку VC++ должен понимать, что он ничего не вернет, если x
не равен y
, и эта функция не будет функционировать должным образом. Вы можете изменить свой код, чтобы это было более безопасно:
bool func(int x, int y){
// do something
return x==y;
}
Это делает его так, что он не возвращает логическое значение, независимо от того, что. Если x равно y, верните true, иначе верните false. Опять же, это должно быть ошибкой с компилятором Visual Studio или вы не даете нам правильный код. FYI: Если это был компилятор g ++ или clang ++, этот код не был бы скомпилирован по причине, которую я объяснил.
Вы должны включить дополнительные предупреждения для своего компилятора VC++, используя -Wall
(все предупреждения). Это должно помочь вам достичь этого: https://blogs.msdn.microsoft.com/vcblog/2010/12/14/off-by-default-compiler-warnings-in-visual-c/
Всегда убедитесь, что у вас есть -Wall
включен, чтобы иметь «безопасный» код, а также убедитесь, что ваша функция будет вернуться, если что-нибудь случится, если только это не void
/не возвращения функции. Обычно это делается компилятором вроде clang ++. Существует плагин для clang ++ и VA: http://llvm.org/builds/. Вы также можете искать clang в своем диспетчере подключаемых модулей Visual Studio для установки непосредственно из среды IDE.
Re: "В чем причина этого?" - по той же причине кто-то напишет 'if (((func (x, y) == true) == true)': они недостаточно хорошо знают язык, чтобы писать простой код. –