"auto function()" 可以在函数体内有几种类型的 return 吗?
can "auto function()" have several types of return inside the function body?
我在使用下面的代码时遇到问题,它会产生错误,我相信这是因为显然 "auto" 无法根据条件处理多种类型的 return。
是这种情况还是我的代码有其他问题?
另外,如果我尝试做的事情无法通过这种方式实现,那么可以通过其他方式实现吗?
auto Game_Manager::getMember(string s)
{
if (s == "rows")return rows; // return unsigned
else if (s == "columns")return columns; // return unsigned
else if (s == "p1")return p1; //return string
else if (s == "p2")return p2; //return string
else cout << "\n\nERROR!!! Invalid argument for getMember()\n\n" << endl;
return 1;
}
auto
表示 "work out the type for me",而不是 "accept any type"。没有可以将此函数声明为的(内置)类型,因此 auto
无效
这是感兴趣的规则(来自标准的第 7.1.6.4 节)
If a function with a declared return type that contains a placeholder type has multiple return
statements, the return type is deduced for each return
statement. If the type deduced is not the same in each deduction, the program is ill-formed.
因此,所有 return 语句必须具有相同的类型。
我在使用下面的代码时遇到问题,它会产生错误,我相信这是因为显然 "auto" 无法根据条件处理多种类型的 return。 是这种情况还是我的代码有其他问题? 另外,如果我尝试做的事情无法通过这种方式实现,那么可以通过其他方式实现吗?
auto Game_Manager::getMember(string s)
{
if (s == "rows")return rows; // return unsigned
else if (s == "columns")return columns; // return unsigned
else if (s == "p1")return p1; //return string
else if (s == "p2")return p2; //return string
else cout << "\n\nERROR!!! Invalid argument for getMember()\n\n" << endl;
return 1;
}
auto
表示 "work out the type for me",而不是 "accept any type"。没有可以将此函数声明为的(内置)类型,因此 auto
无效
这是感兴趣的规则(来自标准的第 7.1.6.4 节)
If a function with a declared return type that contains a placeholder type has multiple
return
statements, the return type is deduced for eachreturn
statement. If the type deduced is not the same in each deduction, the program is ill-formed.
因此,所有 return 语句必须具有相同的类型。