Мне интересно, является ли оператор return немедленным, когда условие возникает без каких-либо исключений.
В частности, у меня есть функция BOOL:
bool pm2_filter( std::string gnomad_ex_controls_an, std::string gnomad_gen_controls_an, std::string &gene_inh_mode )
{
if ( gnomad_ex_controls_an == "NA" && gnomad_gen_controls_an == "NA" ) {
return true;
}
else {
if ( gene_inh_mode == "dom" || gene_inh_mode == "NA" ) {
if ( gnomad_ex_controls_an != "NA" ) {
if (std::stoi(gnomad_ex_controls_an) == 0) {
return true;
}
}
else if ( gnomad_gen_controls_an != "NA" ) {
if (std::stoi(gnomad_gen_controls_an) == 0) {
return true;
}
}
else {
return false;
}
}
else if ( gene_inh_mode == "rec" ) {
if ( gnomad_ex_controls_an != "NA" && floatable(gnomad_ex_controls_an) ) {
if (cmpf(std::stof(gnomad_ex_controls_an), 1E-4, 1E-10)) {
return true;
}
}
else if ( gnomad_gen_controls_an != "NA" && floatable(gnomad_gen_controls_an) ) {
if (cmpf(std::stof(gnomad_gen_controls_an), 1E-4, 1E-10)) {
return true;
}
}
else {
return false;
}
}
}
}
Если я пытаюсь запустить его таким образом, он предупреждает меня:
dependencies/filterFunctions.cpp:403:1: warning: control may reach end of non-void function [-Wreturn-type]
}
, чтобы избежать предупреждения, я могу поставить окончательную return
для функции, например,
bool pm2_filter( std::string gnomad_ex_controls_an, std::string gnomad_gen_controls_an, std::string &gene_inh_mode )
{
if ( gnomad_ex_controls_an == "NA" && gnomad_gen_controls_an == "NA" ) {
return true;
}
else {
if ( gene_inh_mode == "dom" || gene_inh_mode == "NA" ) {
if ( gnomad_ex_controls_an != "NA" ) {
if (std::stoi(gnomad_ex_controls_an) == 0) {
return true;
}
}
else if ( gnomad_gen_controls_an != "NA" ) {
if (std::stoi(gnomad_gen_controls_an) == 0) {
return true;
}
}
else {
return false;
}
}
else if ( gene_inh_mode == "rec" ) {
if ( gnomad_ex_controls_an != "NA" && floatable(gnomad_ex_controls_an) ) {
if (cmpf(std::stof(gnomad_ex_controls_an), 1E-4, 1E-10)) {
return true;
}
}
else if ( gnomad_gen_controls_an != "NA" && floatable(gnomad_gen_controls_an) ) {
if (cmpf(std::stof(gnomad_gen_controls_an), 1E-4, 1E-10)) {
return true;
}
}
else {
return false;
}
}
}
// FINAL RETURN:
return false;
}
но мне интересно, если этот return
в конце функции эффективно возвращается ТОЛЬКО ADN, ЕСЛИ ТОЛЬКО НЕТ другого предыдущего return
, без исключения.
Я попытался выяснить это на веб-гайке и не нашел конкретного ответа, поэтому я прошу вас, ребята-эксперты.
Заранее большое спасибо за любую помощь.