在某些文献中,如http://en.wikibooks.org/wiki/C%2B%2B_Programming/Exception_Handling,它们将所有异常视为对象,即使它们抛出基本类型或指针。
我想问为什么我们称它们为对象,如果有时它们不是对象。 如果我不理解,请纠正我。
答案 0 :(得分:5)
好吧,您可以使用原语,例如const char*
或int
来正确抛出并捕获异常
try {
if(bad_condition_one) {
throw "Bad condition 1 was hit.";
}
else if(bad_condition_two) {
throw 42;
}
}
catch(const char* msg) {
std::cerr << msg << std::endl;
}
catch(int code) {
std::cerr << code << std::endl;
}
但这样做肯定不是一个好主意。您应该首先使用从std::exception
派生的异常值。并将它们作为const
引用来捕获,如:
try {
if(bad_condition_one) {
throw std::runtime_error("Bad condition 1 was hit.");
}
}
catch(const std::exception& ex) {
std::cerr << ex.what() << std::endl;
}
请在您的问题中更正确地定义 对象 的概念(您的意思是class
,struct
还是union
类型实际上?)。
答案 1 :(得分:5)
问:&#34;我想问为什么我们称它们为对象,如果有时它们不是 对象&#34;
任何占用记忆的东西都是一个对象。 面向对象的目的是通过将数据接受的操作与数据本身绑定,将焦点转移到数据(对象)。
显然,只有用户定义的类型允许您以编程方式执行此操作,但不会将基本类型作为对象停止。
根据C++11
标准:
1.8 C ++对象模型[ intro.object ]
1 C ++程序中的构造创建,销毁,引用,访问, 并操纵对象。对象是存储区域。
这是维基百科所说的:
在计算机科学中,对象是存储器中具有值的位置 并且可能由标识符引用。对象可以是变量, 数据结构或函数。在基于类的面向对象中 编程范式,&#34;对象&#34;是指a的特定实例 class,其中对象可以是变量,函数的组合, 和数据结构。