Warning: file_get_contents(/data/phpspider/zhask/data//catemap/6/cplusplus/153.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C++ 如何在C++;正确的错误处理?_C++ - Fatal编程技术网

C++ 如何在C++;正确的错误处理?

C++ 如何在C++;正确的错误处理?,c++,C++,我以前问过这个问题,但是不理解这个问题的人把它关闭了。我不是在寻找一个循环,我是在寻找如何在生产代码中使用诸如参数错误处理和溢出之类的东西 请不要只说“使用库X”,除非您可以链接到所述库的代码,它实际上解决了这些问题。这取决于输入的域 如果您使用的是32位或64位整数,则根本不应使用循环:只需使用查找表即可。有n个的不多可由64位整数表示。对于查找表,检查溢出很容易:如果查找表中没有n的条目,那么它显然超出了范围 如果输入大于该值,那么您可能会使用某种“大整数”类,溢出不太可能成为问题。这取决于

我以前问过这个问题,但是不理解这个问题的人把它关闭了。我不是在寻找一个循环,我是在寻找如何在生产代码中使用诸如参数错误处理和溢出之类的东西


请不要只说“使用库X”,除非您可以链接到所述库的代码,它实际上解决了这些问题。

这取决于输入的域

如果您使用的是32位或64位整数,则根本不应使用循环:只需使用查找表即可。有
n个
不多可由64位整数表示。对于查找表,检查溢出很容易:如果查找表中没有
n
的条目,那么它显然超出了范围


如果输入大于该值,那么您可能会使用某种“大整数”类,溢出不太可能成为问题。

这取决于输入的域

如果您使用的是32位或64位整数,则根本不应使用循环:只需使用查找表即可。有
n个
不多可由64位整数表示。对于查找表,检查溢出很容易:如果查找表中没有
n
的条目,那么它显然超出了范围


如果输入大于该值,那么您可能会使用某种“大整数”类,溢出不太可能成为问题。

使用表查找。您不需要大表,因为阶乘将很快溢出64位双精度变量范围。您只需要存储从0到170的参数值的函数值。超出该范围的任何内容都会生成错误。

使用表格查找。您不需要大表,因为阶乘将很快溢出64位双精度变量范围。您只需要存储从0到170的参数值的函数值。超出该范围的任何内容都会产生错误。

可能是以下简单内容:

unsigned factorial(unsigned n)
{
   if (n > theUpperThreshold)
      throw ExceptionFormYourMathLibrary("Explain that n! can't be represented by unsigned");

   return lookupTable[n];      
}

除非您的数学库也提供了一些大整数类。

可能很简单:

unsigned factorial(unsigned n)
{
   if (n > theUpperThreshold)
      throw ExceptionFormYourMathLibrary("Explain that n! can't be represented by unsigned");

   return lookupTable[n];      
}

除非你的数学库也提供了一些大整数类。

你的意思是说“如果你的输出是32位还是64位整数?”@Ken:是的,事实上这就是我的意思。“谢谢你!”霍华德:我就知道这是件小事;六点以后!我的大脑抛出了一个溢出异常,所以我停在那里。我在仅仅5秒钟后就删除了我的评论。反正你找到了!是的,0-20表示无符号64位。如图11所示,0-170表示64位双精度。0-12表示无符号32位。表解决方案听起来不错,除非你想处理BigInt。在这种情况下,设计可能取决于BigInt的细节。你的意思是说“如果你的输出是32位还是64位整数?”@Ken:是的,事实上这就是我的意思。“谢谢你!”霍华德:我就知道这是件小事;六点以后!我的大脑抛出了一个溢出异常,所以我停在那里。我在仅仅5秒钟后就删除了我的评论。反正你找到了!是的,0-20表示无符号64位。如图11所示,0-170表示64位双精度。0-12表示无符号32位。表解决方案听起来不错,除非你想处理BigInt。在这种情况下,设计可能取决于BigInt细节。所以你的问题与阶乘无关,而是关于“正确编程”?基本上是的。我不会说它与阶乘无关,因为我想你不会希望像这样的简单问题需要大量的错误处理。所以你的问题与阶乘无关,是关于“正确编程”?差不多是的。我不会说它与阶乘无关,因为我想你不会希望对这样一个简单的问题进行重量级的错误处理。除此之外,你还可以使用模板生成列表。你是如何生成这个错误的?例外情况?返回a-1?断言?我是否应该使用out参数并返回0以获得成功?这里有很多选项。不要为这样一个简单的函数使用参数。要么返回1,要么抛出一个异常。那么,哪一个是C++中正确的方法,这会使使用我的函数的人感到恼怒?为了增加这个,你也可以使用模板来生成列表。例外情况?返回a-1?断言?我是否应该使用out参数并返回0以获得成功?这里有很多选项。不要为这样一个简单的函数使用参数。要么返回1,要么抛出一个异常。那么,哪一个是C++中正确的方法,这会使使用我的函数的人感到恼火?