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

网站开发公司徐州三明seo培训

网站开发公司徐州,三明seo培训,各种网站末班,工程建设项目管理办法实施细则一、隐式转换 以前分析过C中的数据类型的转换,也顺带介绍过隐式转换。本文重点分析一下,为什么C/C中需要存在隐式转换这一种数据类型的转换方式。隐式转换,就是由编译器自动处理数据类型的转换而不需要开发者进行干预的过程。 二、隐式转换…

一、隐式转换

以前分析过C++中的数据类型的转换,也顺带介绍过隐式转换。本文重点分析一下,为什么C/C++中需要存在隐式转换这一种数据类型的转换方式。隐式转换,就是由编译器自动处理数据类型的转换而不需要开发者进行干预的过程。

二、隐式转换种类

隐式转换主要有以下几种情况:
1、基础类型的隐式转换
这种转换非常常见,比如在传递参数时,向一个double类型的参数传递一个int类型的基础类型值,则编译器会自动的进行隐式的转换。另外,编译器默认把非显式声明的数据类型默认为int类型,也可以认为是一种隐式转换。

void getData(double c){...}
int main(){int d = 0;getData(d);return d;
}

2、类对象的隐式转换
在C++中类对象的隐式转换比较复杂,但通晓其原理后就会比较清楚了,主要有:
a)单参数构造函数的隐式转换
b)通过重载运算符实现隐式转换(包括在新标准中的operator转换,可参看前面的“c++11的类型转换函数”)
3)父子类对象间的隐式转换

class Base { };
class Derived : public Base { };void controleType(Base b) { }  int main() {Derived d;controleType(d);  return 0;
}

3、wrapper的隐式转换
在标准库中提供了大量的这种转换,如万能引用和在模板中用到的std::reference_wrapper等。

三、控制隐式转换

一般来说,对基础类型的隐式转换出现问题的概率不大,但正是因为概率不大,出现问题后反而不容易想到它。比如前面提到的有符号和无符号的转换,导致的判断异常。所以,正常编程的情况下,能不使用隐式转换就尽量避免使用隐式类型转换。在C++中为了控制隐式转换,提供了几种方法:
1、使用几种cast
如常见的static_cast,const_cast等,它们提供了基础的安全保障,建议在做数据类型转换时,使用它们。
2、类中的显示explicit
在控制类对象的隐式转换中,显示的使用explicit关键字,防止单参数构造函数对象的隐式转换。并限制对一些特殊符号的重载动作或显示的提供重载的注释等文档提示。在涉及到继承的隐匿转换时,要做好父子类的权限控制等操作,防止出现一些简单的基础问题。
3、模板的隐式转换控制
模板中的隐式转换控制建议使用SFINAE技术或更高版本中的概念(Concpts)等来实现

四、实际的例子

控制隐式转换的例子很多,下面看几个基础的例子:

double d = 3.14;
int i = static_cast<int>(d);  class Base { virtual void dummy() {} };
class Derived : public Base {};Base* basePtr = new Derived();
Derived* derivedPtr = dynamic_cast<Derived*>(basePtr);const int c = 42;
int* modifiable = const_cast<int*>(&c);  
//explicit
class Demo {
public:explicit Demo(int d) : data(d) {}  // 显式构造void print() const {std::cout<<"data is:"<<data<<std::endl;}
private:int data;
};void display(const Demo& dm) {dm.print();
}int main() {// display(7);          // 错误display(Demo(7));  // 正确return 0;
}

SFINAE和Concepts的例子在前面写了很多,这里不再重复,有兴趣的可以搜索一下前面的相关文章即可,或直接在网上查找相关的资料。

五、隐匿类型转换的意义

通过上面的分析,初步明白了隐式转换的内容,那么为什么会存在这种情况呢?其实就是为了方便简单。正如在实际生活中,把一根木杆截短(而不是寻找一个等长的木杆)和把一个豆子放进碗里(而不是为了一个碗而装装一整碗的豆子)是非常常见的。这样做既简单又方便,更重要的是,它比寻找一个合适的匹配更节省成本,看似牺牲了一些成本,但在另外一方面节省了更多的成本,尤其是时间成本。
综上所知,隐式转换的存在的根本原因就是取得整体成本上的优势并让开发在这个方面变得简单无需程序员直接处理。当然,世界上没有免费的午餐,这样做自然就代入了隐式的风险(这在前面已经分析过了),但只要能够控制好这种风险,隐式转换就有存在的意义。

六、总结

隐式转换是不安全的,但又是简单省事的。所以,最好的应用方法是尽可能的在安全的前提下减少使用这种方式。标准的发展也是如此,尽量将隐式转换控制在可控的范围内并逐渐减少这种应用。
最终还是那句话,可控的选择合适的应用场景,就不会有问题。

http://www.dtcms.com/a/443552.html

相关文章:

  • 做品牌 需要做网站吗网站建设运营期末考试
  • id注册网站wordpress访问不了
  • 阿克苏网站建设咨询logo图案大全
  • 百度网站建设电话网站seo优化技巧
  • 龙华品牌网站建设石景山区公司网站建设
  • 河南省建设网站电力建设期刊网站投稿
  • 北京做网站公司排名浩森宇特江苏省建设档案网站
  • 给网站添加百度地图本地电脑做服务器 建网站
  • wordpress govpress 汉化北京网站推广优化公司
  • 网站安全防护方案北京微信网站建设电话咨询
  • 优秀网站架构网站seo什么意思
  • 个人可以做电视台网站吗怎么做网络营销
  • Python 题目练习 Day1.2
  • 做宣传网站需要多少钱中山移动网站建设报价
  • 网站开发开题报告怎么写北京室内设计公司排名
  • 向量数据库 Milvus 的高可用
  • 轻量级、高性能的RPC框架——Dubbo
  • 预约网站模板出境旅游哪个网站做的好
  • 那些网站可以做海报网站品牌建设方案
  • 旺道网站排名优化房产信息网显示限售
  • 网站反向绑定域名优秀的电商app设计网站
  • 开发网站过程wordpress 用户头像
  • 建立内部网站如何破解网站后台密码
  • 广西高端网站建设公司手机制作简历模板免费
  • 做网站合成APPwordpress 搜索引擎平台
  • 深度学习模型训练工具
  • 新网站制作平台快速建站平台源码
  • 【C转C++】 C转C++超值且好用的容器与函数
  • 个人网站怎么做app做茶网站
  • VBA中类的解读及应用第二十八讲:为什么要使用类及使用类接口规范