相关疑难解决方法(0)

C++ throw装饰有什么用吗?

我已经开始以统一的方式使用C++异常,现在我希望编译器(g ++)检查没有"异常泄漏".该throw装修应该这样做,好像const确实为类方法常量性.

嗯,事实并非如此.

使用throw仍然是纪录片,但如果其他人认为函数不能抛出其文档中列出的其他异常,则甚至可能会产生危险的误导.

可以说g ++以某种方式被说服对其抛出检查更加严格,即真正确保一个函数被装饰为throw()永远不会抛出任何东西.

编辑:发现此问题广泛处理该主题.

c++ exception

14
推荐指数
2
解决办法
9879
查看次数

这个头的含义是什么(virtual const char*what()const throw())?

class myexception: public exception
{
  virtual const char* what() const throw()
  {
    return "My exception happened";
  }
};
Run Code Online (Sandbox Code Playgroud)

对不起,这个问题可能听起来很愚蠢,但我在解析标题时遇到了问题.有人能用英语描述标题的实际含义吗?对我来说,首先看起来很奇怪的是关键字virtual.该myexception班是不是一个基类,从已经实施的继承exception类,所以为什么还要用virtual在这里?我猜const是返回类型是一个c风格的字符串是const,另一个const是确保这个对象不能被修改(有人可以告诉我该对象可能是什么?).我不知道究竟throw()是什么,从未见过这种语法.

c++ exception

14
推荐指数
1
解决办法
5587
查看次数

带有和不带throw()的方法/构造函数签名中的c ++,用于自定义异常

我是c ++的初学者,因此为这个愚蠢的问题道歉.我在这里发帖是因为我在stackoverflow上找不到类似的答案.

我正在逐步完成C++中的异常,而且我正在尝试使用自定义异常,我有这个代码

class MyException: public std::exception{
public:
    virtual const char* what() const throw() {
        return "something bad happened";
    }

};

// class that throws above exception

class canGoWrong {
public:
    canGoWrong(){
        throw MyException();
    }
};
Run Code Online (Sandbox Code Playgroud)

上面的代码由老师展示.构造函数刚刚实现了基类中定义的虚函数exception.我到那儿.

现在,当我尝试使用不同版本进行练习时,我尝试使用自定义函数而不是重新定义虚拟(因为c ++没有严格执行接口的概念,如果我在这里错了,请纠正我.)

我把它写成了

class my_custom_shit_exception: public std::exception {
public:
    const char* show() { // I omitted the const throw() here
            return "This is an error encountered\n";
    }
};

class myclass {
public:
    myclass() {
        throw my_custom_shit_exception();
    }
};
Run Code Online (Sandbox Code Playgroud)

总而言之,我没有发现两种方式的行为差异

public:
const …
Run Code Online (Sandbox Code Playgroud)

c++ exception class throw

6
推荐指数
1
解决办法
624
查看次数

标签 统计

c++ ×3

exception ×3

class ×1

throw ×1