当前位置: 首页 > news >正文

特微网站首页制作网站费用

特微网站首页,制作网站费用,做内贸的电子商务网站典型有,电力建设网站一、异常处理手段 抛出异常:throw 异常 作用:让调用者看见这个异常,如果调用者不理睬,就让调用者的调用者看见 接住异常: try {可能异常的code} catch(异常类型) {处理方式} 异常类型:一般为const &,防…

一、异常处理手段

  • 抛出异常:throw 异常

    • 作用:让调用者看见这个异常,如果调用者不理睬,就让调用者的调用者看见

  • 接住异常: try {可能异常的code} catch(异常类型) {处理方式}

    • 异常类型:一般为const &,防止copy;

    • 如果 不确定异常类型,也可以用catch(...){处理方式},并且在catch中仍可用throw;继续抛

二、标准异常类

  • 都继承于 exception 这个基类
  • 异常的类型:
    • bad_alloc
    • logic_error 
      • length_error
      • out_of_range (stl容器调用at)
      • domain_error
      • invalid_argument
    • runtime_error
      • range_error
      • overflow_error
      • underflow_error
    • bad_cast
  • catch(...)一般写在异常类型的最后

例子:

#include <iostream>
#include <vector>void strcpy(char *dest, const char *source)
{if (!dest || !source)throw std::invalid_argument("Null Pointers pass to strcpy.");while (*source)*dest++ = *source;*dest = '\0';
}template <typename T>
class Array
{
public:Array(std::size_t n)try : m_size(n), m_data(new T[n]){}catch (const std::bad_alloc &ba){std::cout << "No enough memory." << std::endl;throw;}private:size_t m_size;int *m_data;
};int main()
{char *dest = nullptr;const char *source = "hello";try{strcpy(dest, source);}catch (const std::invalid_argument &e){std::cout << "invalid_argument" << std::endl;std::cout << e.what() << std::endl;}catch (...){std::cout << "catch" << std::endl;}return 0;
}

三、栈展开

栈展开作用: 销毁局部变量

四、构造函数try-catch

template <typename T>
class Array
{
public:Array(std::size_t n)try : m_size(n), m_data(new T[n])  //写法比较特殊{}catch (const std::bad_alloc &ba){std::cout << "No enough memory." << std::endl;throw;}private:size_t m_size;int *m_data;
};

五、异常安全保证

  1. 不抛异常(Nothrow guarantee):保证不抛出异常
  2. 强异常安全保证(Strong guarantee):抛出异常程序状态不变
  3. 弱异常安全保证(Weak guarantee):状态改变,但在有效状态

六、不抛出异常 noexcept 关键字可以让编译器进行更好的优化

  • 如果函数声明了noexcept, 但还是抛出了一场,调用栈可能开解(直接崩溃)
    • note:移动构造 和 移动赋值 不声明为noexcept,比那一期是不敢用的
  • noexcept的两种特殊用法:
    • noexcept(bool) : 相当于开关noexcept的作用,noexcept(true) = noexcept(bool);
    • noexcept(noexcept(std::swap(thing,other.thing))) : 这个noexcept是一个表达式。根据内部函数是够抛异常决定返回true/false

七、copy&swap

#include <vector>
#include <string>
#include <iostream>// class Buffer
// {
// private:
//     unsigned char *_buf;
//     int _capacity;
//     int _length;// public:
//     explicit Buffer(int capacity) : _capacity(capacity), _length(0)
//     {
//         std::cout << "Buffer(int capacity)" << std::endl;
//         // throw std::invalid_argument("=====");
//         _buf = capacity == 0 ? nullptr : new unsigned char[capacity]{};
//     }//     ~Buffer()
//     {
//         std::cout << "~Buffer()" << std::endl;
//         delete[] _buf;
//     }//     Buffer(const Buffer &buffer)
//     {
//         std::cout << "Buffer(const Buffer &buffer)" << std::endl;
//         this->_capacity = buffer._capacity;
//         this->_length = buffer._length;
//         // throw std::invalid_argument("=====");
//         this->_buf = new unsigned char[buffer._capacity];
//         std::copy(buffer._buf, buffer._buf + buffer._capacity, this->_buf);
//     }//     Buffer(Buffer &&buffer) noexcept
//     {
//         std::cout << "Buffer(Buffer &&buffer)" << std::endl;
//         this->_capacity = buffer._capacity;
//         this->_length = buffer._length;
//         this->_buf = buffer._buf;//         buffer._buf = nullptr;
//         buffer._capacity = 0;
//         buffer._length = 0;
//     }//     Buffer &operator=(const Buffer &buffer)
//     {
//         std::cout << "Buffer &operator=(const Buffer &buffer)" << std::endl;
//         if (this != &buffer)
//         {
//             this->_capacity = buffer._capacity;
//             this->_length = buffer._length;
//             delete[] this->_buf;
//             throw std::invalid_argument("....");
//             this->_buf = new unsigned char[buffer._capacity];
//             std::copy(buffer._buf, buffer._buf + buffer._capacity, this->_buf);
//         }
//         return *this;
//     }//     Buffer &operator=(Buffer &&buffer) noexcept
//     {
//         std::cout << "Buffer &operator=(Buffer &&buffer)" << std::endl;
//         if (this != &buffer)
//         {
//             this->_capacity = buffer._capacity;
//             this->_length = buffer._length;
//             delete[] this->_buf;
//             this->_buf = buffer._buf;//             buffer._buf = nullptr;
//             buffer._capacity = 0;
//             buffer._length = 0;
//         }
//         return *this;
//     }//     bool write(unsigned char value) noexcept
//     {
//         if (_length == _capacity)
//             return false;
//         _buf[_length++] = value;
//         return true;
//     }
// };class Buffer
{
private:unsigned char *_buf;int _capacity;int _length;public:explicit Buffer(int capacity) : _capacity(capacity), _length(0){_buf = capacity == 0 ? nullptr : new unsigned char[capacity];}~Buffer(){delete[] _buf;}friend void swap(Buffer &lhs, Buffer &rhs);Buffer(const Buffer &buffer) : _capacity(buffer._capacity),_length(buffer._length),_buf(_capacity == 0 ? nullptr : new unsigned char[_capacity]){std::copy(buffer._buf, buffer._buf + buffer._capacity, this->_buf);}Buffer(Buffer &&buffer) noexcept : Buffer(0){swap(buffer, *this);}Buffer &operator=(Buffer buffer) // 会做一次拷贝构造/移动构造,根据传入参数类型确定{swap(buffer, *this);return *this;}bool write(unsigned char value) noexcept{if (_length == _capacity)return false;_buf[_length++] = value;return true;}
};void swap(Buffer &lhs, Buffer &rhs)
{using std::swap;swap(lhs._buf, rhs._buf);swap(lhs._capacity, rhs._capacity);swap(lhs._length, rhs._length);
}class BitMap
{
public:explicit BitMap(size_t size) : _buffer(size) {}static void Swap(BitMap &lhs, BitMap &rhs){using std::swap;swap(lhs._buffer, rhs._buffer);}private:Buffer _buffer;
};int main()
{int *a = nullptr;Buffer buffer(10);buffer.write(52);buffer.write(37);Buffer buffer1(20);buffer1.write(20);buffer1.write(111);swap(buffer, buffer1);// try// {//     buffer1 = buffer;// }// catch (...)// {//     std::cout << "error" << std::endl;// }// buffer.write(52);// buffer.write(37);// Buffer buffer1(20);// buffer1.write(20);// buffer1.write(111);// try// {//     buffer1 = buffer;// }// catch (...)// {//     std::cout << "error" << std::endl;// }// std::cout << "over" << std::endl;
}// Buffer buffer = Buffer(10);
// buffer = Buffer(16);

http://www.bjxfkj.com.cn/article/102600.html

相关文章:

  • 做网站需要什么手续资料国外网站开发
  • 成都网站开发建设如何建立一个自己的网站
  • 政府门户网站建设内容开源seo软件
  • 53网站客服系统哪个好百度ai开放平台
  • 网站建设应该怎么做包就业的培训学校
  • 高仿服装网站建设浏览器里面信息是真是假
  • 本地做网站顺序百度行发代理商
  • 长沙开发网站的公司seo怎么搞
  • 成都网站建设价格软文范例大全800字
  • 沈阳网站优化建设软文推广案例500字
  • seo网站程序统计网站流量的网站
  • 江门网站建设公司推广营销策划方案
  • 如何做网站联盟网站友链查询接口
  • 网站平台建设调研报告站长之家是什么网站
  • 我做服装设计师的 求推荐资源网站微商软文范例
  • 企业营销网站服务器1g够学it什么培训机构好
  • 模板网站哪家靠谱岳阳网站建设推广
  • 网站排名的重要性百度指数排名
  • 香港特别行政区区徽平台seo什么意思
  • 上海龙雨建设工程有限公司网站百度电话客服24小时人工
  • ps做的网页怎么导入网站毕节地seo
  • 有没有专业做电视测评的网站阿里域名注册官网
  • 公司网站建设入哪科目2023年最新新闻摘抄
  • 中山制作网站的公司seo关键词排名优化怎样收费
  • 电商营业执照网上申请四川企业seo推广
  • 建设工程造价信息网站外贸seo软件
  • 想推网站目录源码seo资讯
  • 苏州微信网站建设seo技术培训教程
  • 建设一个门户网站seo发包排名软件
  • 做任务赚钱的网站源码seo实战视频