c++ logic_error() 异常的使用方法
创始人
2024-02-09 15:12:44
0

c++ logic_error() 异常的使用方法

*** 简单的用法就是如下所示. 抛出一个logic_error()异常,接住,展示.
$ cat main.cpp
#include
#include
using namespace std;
int main()
{
    try
    {
//        logic_error e("test this");
        logic_error e(string("test this ")+"and that"); //显示了字符串类可以直接用+来连接
        throw e; //exception 用法, 如此构造和抛出异常
    }
    catch(exception &ex)    // exception 的用法,如此接受异常
    {
        printf("catch %s\n",ex.what()); //exception 用法,如此访问异常
    }
    return 0;
}

不爽的地方是ctags认不准这种结构了, 在vim中查看很不方便.
在gdb 中也不让查看. 非常不爽!
(gdb) p e
  $1 =
(gdb) ptype e
  type = class std::logic_error {
     
  }
 
*** 那这个logic_error 到底是啥呢?
 有时候,c++ 的封装确实不好说是好是坏!
logic_error 是一个exception 的继承类,
在/usr/include/c++/9/stdexcept 文件中定义.
通过qtcreator 找到, 有时IDE 确实在找定义方面更准更强!
// 下面内容有简化
 class logic_error : public exception
  {
    char * _M_msg; //保存信息

  public:
    logic_error(const string& __arg) _GLIBCXX_TXN_SAFE;
    logic_error(const char*) _GLIBCXX_TXN_SAFE;
    logic_error(logic_error&&) noexcept;
    logic_error& operator=(logic_error&&) noexcept;
    logic_error(const logic_error&) = default;
    logic_error& operator=(const logic_error&) = default;
    virtual ~logic_error() _GLIBCXX_TXN_SAFE_DYN _GLIBCXX_NOTHROW;

    /** Returns a C-style character string describing the general cause of
     *  the current error (the same string passed to the ctor).  */
    virtual const char*
    what() const _GLIBCXX_TXN_SAFE_DYN _GLIBCXX_NOTHROW;
  };

  可以看出它主要是一些构造函数 和 what() 函数, 无它了, 再看一下exception 类

 class exception
  {
  public:
    exception() _GLIBCXX_NOTHROW { }
    virtual ~exception() _GLIBCXX_TXN_SAFE_DYN _GLIBCXX_NOTHROW;
    exception(const exception&) = default;
    exception& operator=(const exception&) = default;
    exception(exception&&) = default;
    exception& operator=(exception&&) = default;

    /** Returns a C-style character string describing the general cause
     *  of the current error.  */
    virtual const char*
    what() const _GLIBCXX_TXN_SAFE_DYN _GLIBCXX_NOTHROW;
  };

  看来exception 就是一个接口类,logic_error是其一个实现类了.
  会像示例那样使用就可以了.

相关内容

热门资讯

政策加持生育利好,圣贝拉上市首... 人口政策正上升为国家战略重心,2025年落地的“真金白银”育儿补贴进一步释放鼓励生育信号。 在此背景...
一场政策及时雨,唤醒长剧市场下... 近日,国家广播电视总局正式印发实施《进一步丰富电视大屏内容“广电21条”促进广电视听内容供给的若干举...
华利集团股价上涨1.39% 体... 截至2025年8月20日15时0分,华利集团股价报52.63元,较前一交易日上涨1.39%。当日成交...
斯瑞新材股价微跌0.06% 商... 截至2025年8月20日收盘,斯瑞新材股价报16.24元,较前一交易日下跌0.01元,跌幅0.06%...
广东“录像厅杀人案”3名凶手被... 1994年5月6日晚,广东省广州市黄埔区某村录像厅,4名年轻男子来询问是否可以夜里包场,女老板何某本...
享年62岁!台湾歌手千百惠因病... 8月20日19:43,华语流行乐男歌手黄安通过微博发布讣告称,台湾著名歌手千百惠于8月19日凌晨因病...
前经纪人透露千百惠去世原因:不... 搜狐娱乐讯 8月20日,黄安发讣告称千百惠去世,享年62岁。消息一出后在网上引起热议,媒体人杜恩湖采...
确认了!今晚抵达昆明!接下来更... 据云南省气象台消息 受辐合低涡影响 预计8月20日夜间至24日白天 云南大部地区将出现一次强降雨过程...
浙江在全国首创的这一制度,有新... 撰文|余晖 8月18日,浙江省文化特派员学院在余姚揭牌成立。这是浙江省推行文化特派员制度的又一创新...
奥瑞金股价微涨0.36% 体育... 奥瑞金最新股价报5.58元,较前一交易日上涨0.36%。盘中最高触及5.58元,最低下探5.53元,...