我确定这个问题已经有人问过了,但我找不到答案。
如果我有一个功能,让我们说:
int Power(int number, int degree){
if(degree==0){
return 1;
}
return number*Power(number, degree-1);
}
Run Code Online (Sandbox Code Playgroud)
它仅在degree是非负时才起作用int。如何防止使用错误的参数调用此函数?
例如,如果程序员编写cout<<Power(2, -1);,我希望编译器拒绝编译代码并返回某种错误消息(例如“函数 Power 只接受非负整数”)。
在这种情况下,另一种选择是函数不返回任何值。例如:
int Power(int number, unsigned int degree){
if(degree<0){
//return nothing
}
if(degree==0){
return 1;
}
return number*Power(number, degree-1);
}
Run Code Online (Sandbox Code Playgroud)
有一个返回值的替代方法:抛出一个值。一个典型的例子:
if(degree<0){
throw std::invalid_argument("degree may not be negative!");
}
Run Code Online (Sandbox Code Playgroud)
我想让编译器拒绝编译代码
通常,参数在运行时之前是未知的,因此这通常是不可能的。
你的回答做得很好。但我很好奇:'throw' 终止程序并阻止执行 Power() 之后的任何事情。
如果您捕获了抛出的对象,那么您可以在抛出该对象的函数之后立即继续。