C++ 试接投掷中的异常终止
我的操作系统是Win8C++ 试接投掷中的异常终止,c++,exception,try-catch,throw,C++,Exception,Try Catch,Throw,我的操作系统是Win8 使用代码::Blocks 12.10 我正在尝试使用来自的一个示例来处理抛出和处理异常 从C++早期对象出发,Addison Wesley .< 下面是我正在使用的简单代码: // This program illustrates exception handling #include <iostream> #include <cstdlib> using namespace std; // Function prototype double
使用代码::Blocks 12.10 我正在尝试使用来自的一个
示例来处理抛出和处理异常 从C++早期对象出发,Addison Wesley .< 下面是我正在使用的简单代码:
// This program illustrates exception handling
#include <iostream>
#include <cstdlib>
using namespace std;
// Function prototype
double divide(double, double);
int main()
{
int num1, num2;
double quotient;
//cout << "Enter two integers: ";
//cin >> num1 >> num2;
num1 = 3;
num2 = 0;
try
{
quotient = divide(num1,num2);
cout << "The quotient is " << quotient << endl;
}
catch (char *exceptionString)
{
cout << exceptionString;
exit(EXIT_FAILURE); // Added to provide a termination.
}
cout << "End of program." << endl;
return 0;
}
double divide(double numerator, double denominator)
{
if (denominator == 0)
throw "Error: Cannot divide by zero\n";
else
return numerator/denominator;
}
我已经看过其他的例子,但还没有找到类似的代码来推导答案
<建议>?/P> < P> C++中有一个令人信服的例子,[除了.Pox] / 1:< /P> 例如:
throw "Help!";
可以由const char*
类型的处理程序捕获:
try {
// ...
} catch(const char* p) {
// handle character string exceptions here
}
当您通过throw“Error:Cannot divide by zero”抛出时\n
,throw
之后的表达式是字符串文字,因此其类型为数组nconstchar(其中n是字符串的长度+1)。此数组类型衰减为指针[except.throw]/3,因此抛出的对象类型为char const*
由句柄捕获的类型(<代码> catch <代码>)在[Real.Real]/3中描述,并且没有一种情况适用于这里,即<代码> conchch**/COD>不被类型<代码> char *<代码>的处理程序捕获。
< P>在C++标准中有一个令人信服的例子,(除了抛出)/ 1:< /P> 例如:throw "Help!";
可以由const char*
类型的处理程序捕获:
try {
// ...
} catch(const char* p) {
// handle character string exceptions here
}
当您通过throw“Error:Cannot divide by zero”抛出时\n
,throw
之后的表达式是字符串文字,因此其类型为数组nconstchar(其中n是字符串的长度+1)。此数组类型衰减为指针[except.throw]/3,因此抛出的对象类型为char const*
[except.handle]/3中描述了处理程序捕获的类型(
catch
),这里没有任何情况适用,即const char*
不被char*类型的处理程序捕获。您是否尝试捕获char const*
?(只是一个猜测)“以下消息”是什么?我建议声明最接近首次使用的变量,并在可能的情况下将其初始化为其值。该程序在VC11中运行良好。我将异常消息作为输出。@jrok-在C++11之前,有一个字符串文本类型的隐式转换为char*
,因此对于C++11之前的编译器,代码是有效的。您是否尝试捕获char const*
?(只是一个猜测)“以下消息”是什么?我建议声明最接近首次使用的变量,并在可能的情况下将其初始化为其值。该程序在VC11中运行良好。我将异常消息作为输出。@jrok-在C++11之前,字符串文字的类型被隐式转换为char*
,因此对于C++11之前的编译器,代码是有效的。这对于C++11是正确的;在C++11之前,有一个从字符串文字到char*
的隐式类型转换,代码是有效的。是的,它被弃用了,但这并不意味着它不是语言的一部分。弃用意味着它可能在将来消失。使用C样式的头是不受欢迎的,但它们永远不会消失,尽管在标准化的早期,有些人有幻想。是的,我不是说它被禁止。应该已经避免使用它了,即使在C++03中它仍然是合法的;在进一步研究C++03标准后,如果没有const
@PeteBecker,我永远不会写catch子句。从数组到n const char到指针到char的转换是合法的,而不是指针转换吗?这对于C++11是正确的;在C++11之前,有一个从字符串文字到char*
的隐式类型转换,代码是有效的。是的,它被弃用了,但这并不意味着它不是语言的一部分。弃用意味着它可能在将来消失。使用C样式的头是不受欢迎的,但它们永远不会消失,尽管在标准化的早期,有些人有幻想。是的,我不是说它被禁止。应该已经避免使用它了,即使在C++03中它仍然是合法的;在进一步研究C++03标准后,如果没有const
@PeteBecker,我永远不会编写catch子句。从数组到n const char到指针到char的转换是合法的,而不是指针转换吗?