gpt4 book ai didi

c++ - 遇到异常时给定函数的返回值是多少?

转载 作者:行者123 更新时间:2023-11-28 01:53:41 25 4
gpt4 key购买 nike

checkUsername()检查用户名的长度,并返回 true当长度大于或等于 5 时。否则返回 false .函数 checkUsername()应该在 BadLengthException() 上返回 false , 但它似乎没有出现 checkUsername() 中的任何代码和 BadLengthException::what()返回 false .但是当遇到长度小于 5 的用户名时,程序仍然可以正常工作。这是怎么回事?返回值是如何传递的false

class BadLengthException: public exception{
public:
int n;
BadLengthException(int x) { n=x; };
virtual int what() throw() {
return n;
}
};
/*
This function checks the username's length,
and returns true when length is greater than or equal to 5.
Otherwise it returns false.
*/
bool checkUsername(string username) {
bool isValid = true;
int n = username.length();
if(n < 5) {
throw BadLengthException(n); //the problem
}
for(int i = 0; i < n-1; i++) {
if(username[i] == 'w' && username[i+1] == 'w') {
isValid = false;
}
}
return isValid;
}

int main() {
int T; cin >> T;
while(T--) {
string username;
cin >> username;
try {
bool isValid = checkUsername(username);
if(isValid) {
cout << "Valid" << '\n';
} else {
cout << "Invalid" << '\n';
}
} catch (BadLengthException e) {
cout << "Too short: " << e.what() << '\n';
}
}
return 0;
}

最佳答案

一个函数可以返回一个值或抛出一个异常,它不能同时做,它们是互斥的。如果它成功返回一个值,则意味着代码没有抛出异常,如果抛出异常,则意味着它没有到达返回值的地步。

此外,捕获返回值也被中断,代码直接跳转到您定义的 catch block 。这就像概念上的硬 goto,如果您忽略自动对象销毁和 finally 类型实现之类的事情,它们将在异常冒泡的过程中发生。

关于c++ - 遇到异常时给定函数的返回值是多少?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/41989117/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com