条款27:尽量少做转型操作

GD32F103RCT6/GD32F303RCT6(6.2)USART串口实战:从寄存器配置到DMA高效传输 本文详细介绍了GD32F103RCT6和GD32F303RCT6的USART串口通信实战,从寄存器配置到DMA高效传输的全过程。通过具体的代码示例和优化建议,帮助开发者快速掌握串口通信的关键技术,提升嵌入式开发效率。特别强调了DMA在高速数据传输中的优势和应用技巧。 阅读详情

特别说明dynamic_cast和static_cast两种

1、static_cast

#include <iostream>

using namespace std;

class Base
{
public:
	Base(int i = 0):bVal(i){cout<<"基类构造函数"<<endl;}
	virtual void say()
	{		
		cout<<++bVal<<endl;
	}

	int bVal;
};

class Drived:public Base
{
public:
	Drived(int i = 10, int j = 5):Base(i),dVal(j){cout<<"派生类构造函数"<<endl;}
	void say()
	{
		cout<<"基类值为:"<<endl;
		//错误做法  这里仅是对*this拷贝一个base部分的副本然后调用say(),
		//他的操作不会影响到*this的内容 
		static_cast<Base>(*this).say();	    //case1
		//正确做法		
		//Base::say();		            //case2	      
		cout<<"派生类值为:"<<endl;
		cout<<dVal<<endl;
	}
private:
	int dVal;
};

int main()
{	
	Drived d;
	d.say();
	cout<<d.bVal<<endl;
	return 0;
}

使用case1的运行结果是:

基类构造函数
派生类构造函数
基类值为:
11
派生类值为:
5
10
使用case2的运行结果是:

基类构造函数
派生类构造函数
基类值为:
11
派生类值为:
5
11

2、dynamic_cast

#include <iostream>

using namespace std;

class Base
{
public:
	Base(int i = 0):bVal(i){cout<<"基类构造函数"<<endl;}
	//virtual void say(){}           //case1
	virtual void fun(){}             //case2
private:
	int bVal;
};

class Drived:public Base
{
public:
	Drived(int i = 10, int j = 5):Base(i),dVal(j){cout<<"派生类构造函数"<<endl;}
	void say()
	{
		cout<<"派生函数"<<endl;
	}
	
private:
	int dVal;
};
int main()
{
	Base *pd = new Drived;
//	pd->say();                                  //case1

	Drived* pd1 = dynamic_cast<Drived*>(pd);    //case2
	pd1->say();                                 //case2
	return 0;
}

使用case1时基类必须有虚函数且与继承类函数同名。

使用case2时基类必须有虚函数,任何虚函数都行。

还有一种是通过Vector和std::trl::shared_ptr实现的,Effective C++中也说了,但是不是很了解怎么用,blog http://blog.youkuaiyun.com/thefutureisour/article/details/7968534也说明了,可以参考。



NTscan扫描工具 ntscan是一个扫描器,可以扫描没有密码和弱密码的共享,先到配置文件中填写猜测的用户名和密码,扫描过程中右侧出现的是扫描日志。 立即下载

相关推荐

保姆级拆解:HP 1312NF/CM1415打印机进纸离合器清洁与更换全记录(附B站/油管视频指路)

本文详细记录了HP 1312NF打印机进纸离合器故障的诊断与修复全过程,包括故障判断、工具准备、拆解步骤、清洁更换技巧及预防措施。特别针对离合器内部海绵老化粘连问题,提供了电工胶布和硬纸片两种实用替代方案,并附有B站/油管视频指路,帮助用户轻松完成打印机维修。

weixin_31102231的博客 379

条款27: 尽量少做转型操作

 一、  Base base; // Derived * p_derived = &base;   //不能通过编译,旧式转型无法执行“向下转型” Derived * p_derived = static_cast(&base); //可以编译通过,但是不是“安全的向下转型”,dynamic_cast可以做到二、1.如果可以,尽量避免转型,特别是在注重效率的代码中避免使用dynamic

孟游的专栏 525

手把手教你用Three.js+Vue打造3D机房可视化系统(附完整代码)

本文详细介绍了如何使用Three.js与Vue 3构建企业级3D机房可视化系统。从技术选型、项目架构设计到3D场景构建、设备建模与渲染策略,提供了完整的开发方案和实战代码。重点讲解了如何实现设备状态实时监控、交互操作与性能优化,帮助开发者快速掌握3D可视化开发的核心技术。

ttt77的博客 320

条款27:尽量少做转型动作

1.如果可以,尽量避免转型,特别是在注重效率的代码中避免dynamic_cast,如果有个设计需要转型动作,尝试发展无需转型的替代设计。2.如果转型是必要的,试着将它隐藏在某个函数背后。客户随后可以调用该函数,而不需要将转型放进它们的代码内;3.一旦不得不使用转型,宁可使用c++style新式转型,不要使用旧式转型。前者很容易辨识出来,而且也相对职责分明。

依然爱猪的博客 1193

Origin画图——获取论文图中数据

有时候需要已发表论文的图的数据,这里使用Origin软件取值,并且可以实现对图形再次画图。 Step 1. 打开origin软件,点击工具,图形数字化工具。 Step 2. 打开要获取数据的图片。拉动红蓝坐标,与图的坐标轴所贴合。 Step 3. 打开要获取数据的图片。拉动红蓝坐标,与图的坐标轴所贴合。 Step 3. 设置参数横轴起始坐标为300-900,纵轴为1.8-2.6. Step 4. 点击第五个手动取点,取出图中数据点。 Step 5. 依次对原图进行取点。点击项目资源查看图。

qq_42278015的博客 5185

数据可视化—power bi 基础操作汇总

数据来源: https://pan.baidu.com/s/1U_Y7rKfhnSKbLmh4FcUD_Q 提取码: yq5v 目录 基本功能与视图 编辑与查询—修改column案例 建立关联性 新增column与DAX完成总价运算 习题练习1:建立可视化图表 产品销售统计图 column拖曳可视化 1.基本功能与视图 ①基础操作界面 ②获取数据—以打开excel为例 ③数据文件基本视图 可视化形式:柱状图、数据、关联性 2.编辑与查询—修改column ①编辑与查询—数据处理界面 .

weixin_52730784的博客 2683

条款27:尽量少做转型动作

条款27:尽量少做转型动作    (Minimize casting.)    内容:    我们先来看一下转型语法,C风格的转型语法大概就是下面这种形式:    (T)expression     //将expression转换为T类型    函数转型语法如下:    T(expression)     ////将expression转换为T类型    这两种转型语法,我们称之为"旧式转型",既

scofieldzhu的专栏 995

基于WEB的报价管理系统的设计与实现

该系统采用B/S模式,后台运用SpringMVC和MyBatis搭建,利用MySQL数据库,来组织存储和管理数据,使用tomcat服务器向外提供服务。使用该系统对外有利于提高企业的综合竞争力,对内有利于提高成本管理和控制的水平,简化了报价流程、提高了工作效率、精简了报价机构,降低了成本。研究和掌握必要的信息采集和数据查询技术,是各个企业,事业单位信息化的一个重要标志。当前大多数企业采取的报价方式仍然是用EXCEL表格和人工的方式,这不仅不利于大量数据的总结,更不利于对销售利润的控制。

m0_60918862的博客 1000

尽量少做转型动作——条款27

C++规则的设计目标之一是,保证“类型错误”绝不可能发生。理论上如果你的程序很“干净地”通过编译,就表示它并不企图在任何对象身上执行任何不安全、无意义、愚蠢荒谬的操作。这是一个极具价值的保证,可别草率地放弃它。 不幸的是,转型(casts)破坏了类型系统(type system)。那可能导致任何种类的麻烦,有些容易辨识,有些非常隐晦。让我们首先回顾转型语法,因为通...

yj_android_develop的博客 316

从一只龙虾到一支团队:OpenClaw 单 Bot 多 Agent 配置实践

单 Bot 多 Agent只有一个对外的聊天入口(飞书 Bot)内部有多个独立的 AI Agent,各司其职主 Agent(总指挥)负责接收任务并分配给子 Agent子 Agent 完成任务后将结果返回给主 Agent角色Agent ID职责使用场景🎯 总指挥main-agent统筹协调,任务分发接收所有用户请求✍️ 笔杆子内容创作公众号、博客、小红书🔬 参谋canmou深度研究竞品分析、市场调研📋 运营官operations运营管理邮件、日历、社交媒体。

Maynor的博客 1084

在虚拟机中对阿克曼转向车进行导航及避障的仿真测试

一、    在我使用rosdep install teb_local_planner去安装teb_local_planner的时候,报错:Command ‘rosdep’ not found, but can be installed with:sudo apt install python3-rosdep2    我花大半个月好不容易建立起的一系列ROS环境,被python3-rosdep2这条万恶的语句连同ROS一起给我删了。。。悲伤来的那么猝不及防    随着ROS版本的迭代,相关资料很多都不再适用

慕羽★的博客 3810

Effective C++ 条款 27:尽量少做转型动作

尽量少做转型动作。避免 C 风格转型,使用 C++ 新式转型。将转型隐藏在函数中,避免在客户端代码中显式转型。优先改进设计,消除对转型的需求。通过遵循这些原则,可以提高代码的安全性、可维护性和效率。

weixin_42255569的博客 518

基于投影法实现扫描文件的光学字符分割——Matlab实现

投影法是指将原图像沿着某个特定的方向进行投影,得到投影线上的像素点的个数或像素值总和,从而可以得到该方向上物体的轮廓信息。对于字符分割,我们可以将图像进行水平和垂直两个方向的投影,从而得到字符之间的分割线。在OCR技术中,字符分割是非常重要的一步骤,因为字符之间的分割对字符识别的准确性有很大的影响。通过对投影值的判断,可以求出字符之间的分割线,这里我们根据垂直方向上的投影值进行判断,选取一个阈值进行筛选即可。使用sum()函数分别计算出水平和垂直方向上的投影值,得到每一行和每一列的投影值。

TechGlide的博客 584

Effective C++条款27:尽量少做转型动作(Minimize casting)

Effective C++条款27:尽量少做转型动作(Minimize casting)

CltCj的博客 704

SAP B1中文培訓教材_SDK

公司内部培训资料,对开发工具 ,DIAPI, UIAPI,Add-ON有详细解说

efm32 入门.pdf

本PDF共计22页,介绍的是操作驱动API,下载与否自己斟酌。

条款27:尽量少做转型动作(Effective C++)

博客搬家,原地址:https://langzi989.github.io/2016/12/21/条款27-尽量少做转型动作/ C++规则设计的目标之一是,保证类型错误决不可能发生。理论上如果你的程序很干净的通过编译,就表示它并不企图在任何对象身上执行任何不安全,无意义,愚蠢荒谬的操作。这是一个及其具有价值的保证,不要轻易放弃它。 但是在很多种情况下,我们不得不进行转型操作,转型操作破坏了类型系统。...

langzi989的专栏 352

OV9734 DATASHEET,完整规格书

OV9734完整规格书,包括电气参数,尺寸规格,寄存器配置表等

Effective C++ 条款27 尽量少做转型动作

1.一些基础 C++规则的设计目标之一 —— 保证“类型错误” 绝对 不可能发生。 理论上,如果程序很"干净地"通过编译,就表示它并不企图在任何对象身上执行任何不安全、无意义、愚蠢荒谬的操作。 But,转型(cast)破坏了类型系统(type system),这种可能会导致任何种类的麻烦,而且这些麻烦繁琐度不一。 如果你用的是C、Java 或 C# ,这点就需要特别注意一下,因为那些语言中的转型比较必要而无法避免,与C++相对比较而言,也不是特别危险。 关于转型(cast),这里通常有三种不同的形式:( 都

qq_18059143的博客 248

大中型超市收银系统(可直接运行)

光步前台收银系统系统功能:商品销售、商品退货、挂单、收银员权限、会员销售、单品取消、整单取消、商品查询、脱机销售、脱机数据上传,基本资料下载,开钱箱、小票打印、收款结算,支持多币种付款方式(现金、储值卡、礼券、微信等),支持多种促销。运行环境:.net 4.0登陆信息用户名:1001 密码:123456内置商品信息,商品编码可输入00001000 - 00010000,测试效果相关功能键F5 结算 F9挂单 F11商品查询 F8退货 Insert单品取消 Del整单取消 F12开钱箱F2 会员 Ctrl+Z退出系统 Home 锁屏 相关源码待公开

条款27:尽量少做转型动作(Minimize casting)

Effective C++之条款27

weixin_43739503的博客 1002

Effective C++之条款27:尽量少做转型动作

声明: 文中内容收集整理自《Effective C++(中文版)第三版》,版权归原书所有。 本内容在作者现有能力的基础上有所删减,另加入部分作者自己的理解,有纰漏之处敬请指正。 条款27:尽量少做转型动作 Minimize casting. C风格转型动作(旧式转型): (T)expression T(expression) C++提供了四种新式转型: const_cast<T...

HakunaMatata的博客 256

Effective C++条款27:尽量少做转型动作

转型语法,通常有三种不同的形式。 C风格的转型动作看起来像这样: (T)expression 函数风格的转型动作看起来像这样: T(expression) C++还提供四种转型: const_cast<T>(expression) dynamic_cast<T>(expression) reinterpret_cast<T>(expression) stat...

qq_44800780的博客 247

《Effective C++》条款27:尽量少做转型动作

C++中的四种新式转型: const_cast:常量性转除 dynamic_cast:用来决定某对象是否归属继承体系中的某个类型 reinterpret_cast:低级转型,如将pointer to int转型为int static_cast:强迫隐式转型,如将non-const转成const, int转为double,将void*转为typed指针,将pointer-to-base转为p

applemonkey11的博客 325

Effective C++ 条款27:尽量少做转型动作

深入解析 Effective C++ 条款27:尽量少做转型动作,详解 C++ 四种新式转型与旧式转型的区别,分析 dynamic_cast 的性能开销及避免转型的设计策略。

凡人叶枫的博客 255

Effective C++ 条款27 尽量少做转型操作

1. 转型语法有三种, C风格转型:(T)expression 函数风格转型:T(expression) 两种方式除了小括号位置不同没有差别,可以称为"旧式转型". C++提供四种新式转型: const_cast<T>(expression): 将const变量引用或指针转为非const引用或指针,移除变量的常量特性.T必须是指针或引用. ...

ddzai7557的博客 120

[Effective C++]条款27:尽量少做转型动作

C++中,转型(cast)技术是将一种数据类型转换为另一种数据类型的过程。C++主要提供了两种主要的转型方式:旧式的C转型方式和四种新式的C++转型方式。

Tim_10的博客 1054

Effective C++条款27:实现之(尽量少做转型动作)

总结 如果可以,尽量避免转型,特别是在注重效率的代码中避免dynamic_cast。如果有个设计需要转型动作,试着发展无需转型的替代设计 如果转型是必须的,试着将它隐藏于某个函数背后。客户随后可以调用该函数,而不需要将转型放进它们自己的代码 宁可使用新式的转型,不要使用旧式转型。前者很容易辨别出来,而且也比较有着分门别类的职掌 ...

董哥的黑板报 1074
上一篇: C++中vector和set删除一亿个数字中的奇数
下一篇: 2015小米在线笔试题
知行且执行
博客等级 码龄14年 38粉丝 73原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值