我国最大规模LNG运输船首制船“绿能瀛”号交付:所用钢材达2.5万吨

作者:小菜 更新时间:2024-05-15 点击数:
简介:快科技5月15日消息,据媒体报道,我国最大规模LNG(液化天然气)运输船建造项目首制船“绿能瀛”号在中国船舶集

【菜科解读】

快科技5月15日消息,据媒体报道,我国最大规模LNG(液化天然气)运输船建造项目首制船“绿能瀛”号在中国船舶集团旗下沪东中华造船(集团)有限公司成功命名交付。

据悉,根据项目规划,该系列将建造12艘大型LNG运输船,而“绿能瀛”号作为首制船,其总长299米,型宽46.4米,型深26.25米,规模宏大。

我国最大规模LNG运输船首制船“绿能瀛”号交付:所用钢材达2.5万吨

该船采用最新一代的双艉鳍线型设计,集成了多项低碳节能技术,其钢材用量高达2.5万吨,甲板面积相当于三个标准足球场大小,足以装载17.4万立方米的液化天然气,满足700万个家庭一个月的用气需求。

近年来,随着我国经济的蓬勃发展以及“双碳”目标的深入实施,LNG进口量持续飙升。

2023年,我国LNG进口量达到7132万吨,同比增长12.6%,跃居全球最大LNG进口国。

在这一背景下,LNG的海上运输成为了连接国内外资源与国内用户的关键纽带,而提升LNG运输的自主可控水平则成为了保障国家能源运输“大动脉”畅通无阻的核心要素。

我国最大规模LNG运输船首制船“绿能瀛”号交付:所用钢材达2.5万吨

在全球能源结构不断优化的背景下,LNG的地位日益凸显。

随着LNG国际贸易需求的增加,LNG海运市场也呈现出快速增长的态势。

据预测,2022年至2026年期间,国际上将新增14个LNG项目,这些项目共需约227艘大型LNG运输船来提供配套运输服务。

对于我国而言,随着LNG产业的快速发展,LNG运输业务也将迎来前所未有的发展机遇。

自己设计C++完善的异常处理类

我们的异常处理类的features 如何写一个异常处理类是一个不太容易的事情,最近刚好接触了一些不错的代码,看到了一些技巧,这里和大家分享一下。

一个相对完善的异常处理类(以及附加的一些东西)应该能够处理下面的一些功能:1) 能够方便的定义异常类的继承树2) 能够方便的throw、catch,也就是在代码中捕获、处理代码的部分应该更短3) 能够获取异常出现的源文件的名字、方法的名字、行号4) 能够获取异常出现的调用栈并且打印出来由于目前我用的平台是linux,所以里面调用的一些函数也只是在linux下面有用。

Windows也肯定是具有相应的函数的,具体可能需要去查查首先科普一些内容: 1) 对于没有捕获的异常(no handler),则会终止程序,调用terminate()2) 在定义函数的时候,我们可以在定义的后面加上throw (exception1, exception2…): a) 如果没有写这一段、则可能抛出任意的异常 b) 如果写throw(),则表示函数不能抛出任意的异常 c) 如果写throw(A, B), 表示函数抛出A、B的异常如果抛出的异常不在列表范围内,则异常不能被catch,也就会调用terminate()我们构想一下我们定义、调用我们的异常类的时候是怎样的一个情形: 1) 定义:1:class DerivedException : public BaseException2: {3:public:4: MY_DEFINE_EXCEPTION(DerivedException, BaseException);5: };2) 如何抛出异常1: MY_THROW(DerivedException)3) 如何catch异常1:catch (DerivedException& e)2: {3: cout5:#include6: 7:#define MY_THROW(ExClass, args...) \8:do \9: { \10: ExClass e(args); \11: e.Init(__FILE__, __PRETTY_FUNCTION__, __LINE__); \12:throw e; \13: } \14:while (false) 15: 16:#define MY_DEFINE_EXCEPTION(ExClass, Base) \17: ExClass(const std::string& msg = "") throw() \18: : Base(msg) \19: {} \20: \21: ~ExClass() throw() {} \22: \23:/* override */ std::string GetClassName() const \24: { \25:return #ExClass; \26: }27: 28:class ExceptionBase : public std::exception29: {30:public:31: ExceptionBase(const std::string& msg = "") throw();32: 33:virtual ~ExceptionBase() throw();34: 35:void Init(constchar* file, constchar* func, int line);36: 37:virtual std::string GetClassName() const;38: 39:virtual std::string GetMessage() const;40: 41:constchar* what() constthrow();42: 43:const std::string& ToString() const;44: 45: std::string GetStackTrace() const;46: 47:protected:48: std::string mMsg;49:constchar* mFile;50:constchar* mFunc;51:int mLine;52: 53:private:54:enum { MAX_STACK_TRACE_SIZE = 50 };55:void* mStackTrace[MAX_STACK_TRACE_SIZE];56: size_t mStackTraceSize;57:mutable std::string mWhat;58: };59: 60:class ExceptionDerived : public ExceptionBase61: {62:public:63: MY_DEFINE_EXCEPTION(ExceptionDerived, ExceptionBase);64: };65: 66:#endif这个头文件首先定义了两个宏,这里先暂时不管他,我先来解释一下ExceptionBase,它继承自std::exception,std::exception里面其实已经提供了一些功能了,但是比较弱,为了实现我们上文提到的功能,这里只是继承了std:exception的借口,也就是what()函数。

上面的接口应该比较好理解,45行的GetStackTrace是打印当前的调用栈,49-51行分别存储了当前出现exception的源文件名,函数名,行号,54行定义了最大的调用栈显示的深度,也就是显示50行。

60行显示了怎样定义一个新的异常类,这个就很方便了,通过MY_DEFINE_EXCEPTION宏去定义了一个继承类,详情见16行,这里不再细说,我这里想说说7行的MY_THROW宏,使用了3个内置的参数,__FILE__, __LINE__, __PRETTY_FUNCTION__, 他们分别是当前的文件名,行号,和函数名,他们的使用方法是在哪儿出现,其相应的值就是什么。

为什么这里要使用MY_THROW宏呢?其实是为了方便的把行号、文件名等加入进来,宏展开的时候是在一行上的,这样也使得行号与出错的行号保持一致,而且让代码更简单。

给出异常类的.cpp文件:1:#include 2:#include 3:#include 4: 5:#include6:#include7: 8:#include"exception_test.h"9: 10:usingnamespace std;11: 12: ExceptionBase::ExceptionBase(const std::string& msg) throw()13: : mMsg(msg),14: mFile(""),15: mFunc(""),16: mLine(-1),17: mStackTraceSize(0)18: {}19: 20: ExceptionBase::~ExceptionBase() throw()21: {}22: 23:void ExceptionBase::Init(constchar* file, constchar* func, int line)24: {25: mFile = file;26: mFunc = func;27: mLine = line;28: mStackTraceSize = backtrace(mStackTrace, MAX_STACK_TRACE_SIZE);29: }30: 31: std::string ExceptionBase::GetClassName() const32: {33:return"ExceptionBase";34: }35: 36:constchar* ExceptionBase::what() constthrow()37: {38:return ToString().c_str();39: }40: 41:const std::string& ExceptionBase::ToString() const42: {43:if (mWhat.empty())44: {45: stringstream sstr("");46:if (mLine > 0)47: {48: sstr \n";71:char** strings = backtrace_symbols(mStackTrace, 10);72:if (strings == NULL) // Since this is for debug only thus73:// non-critical, don‘t throw an exception.74:return"\n";75: 76: std::string result;77:for (size_t i = 0; i 自己,设计,C++,完善,的,异常,处理,类,我们,的,

稿定设计里找到云相册的简单步骤

稿定设计里如果我们想要找到云相册该怎么来操作呢,今天小编就来给大家介绍一下稿定设计里找到云相册的简单步骤,有需要的一起来看看吧。

稿定设计里找到云相册的简单步骤 首先从手机桌面上打开稿定设计。

然后点击右下方账号。

打开以后,再登录账号【QQ、微信、微博】都可以登录 登录成功以后,点击云相册。

进去以后就可以发布照片,保存自己喜欢的图片。

以上就是小编给大家带来的全部内容,大家都学会了吗?

加入收藏
               

我国最大规模LNG运输船首制船“绿能瀛”号交付:所用钢材达2.5万吨

点击下载文档

格式为doc格式

  • 账号登录
社交账号登录