所有异常都是c ++中的对象?

Arl*_*lic 1 c++ exception object

在一些文献中,如http://en.wikibooks.org/wiki/C%2B%2B_Programming/Exception_Handling,它们将所有异常视为对象,即使它们抛出基本类型或指针.

我想问为什么我们称它们为对象,如果有时它们不是对象.如果我不理解,请纠正我.

πάν*_*ῥεῖ 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;
 }
Run Code Online (Sandbox Code Playgroud)

但这样做肯定不是一个好主意.您应该使用从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;
 }
Run Code Online (Sandbox Code Playgroud)

请在您的问题中更正确地定义您的对象概念(您的意思是class,struct还是union实际键入?).


Gal*_*lik 5

问: "我想问为什么我们称它们为对象,如果有时它们不是对象"

占据记忆的任何东西都是一个对象.点对象方向是将焦点到移位数据通过结合与数据本身的数据接受操作(对象).

显然,只有用户定义的类型允许您以编程方式执行此操作,但这不会阻止基本类型成为对象.

根据C++11标准:

1.8 C++对象模型[ intro.object ]

1 C++程序中的构造创建,销毁,引用,访问和操作对象.对象是存储区域.

这是维基百科所说的:

对象(计算机科学)

在计算机科学中,对象是存储器中具有值并且可能由标识符引用的位置.对象可以是变量,数据结构或函数.在基于类的面向对象编程范例中,"对象"指的是类的特定实例,其中对象可以是变量,函数和数据结构的组合.