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

设计师网页导航官网重庆seo和网络推广

设计师网页导航官网,重庆seo和网络推广,wordpress 预订 插件,wordpress升级后出错一、隐式转换 以前分析过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/wzjs/265635.html

相关文章:

  • 西部数码创建子网站搜索百度指数
  • 深圳网站设计制作元qq群怎么优化排名靠前
  • 做脚本从网站引流西点培训前十名学校
  • wordpress采集接口哪些行业适合做seo
  • 事业单位网站开发工作规程列表网推广效果怎么样
  • 设计公司名字参考关键词优化seo多少钱一年
  • 网站开发设计的地域分析免费涨热度软件
  • 西安网站开发高端网站开发网上国网app推广方案
  • 谁可以教我做网站太仓seo网站优化软件
  • flash网站设计百度推广登录
  • wordpress 搜索摘要蜘蛛seo超级外链工具
  • 贵阳网站建设黔搜南召seo快速排名价格
  • 网站建设服务合同交印花税站长之家最新域名查询
  • 建设监理工程师网站网络优化报告
  • 网站建设需要软件网店营销与推广策划方案
  • 重庆网站seo公司广告网站
  • 专业定制网站建设代理学网络与新媒体后悔死了
  • 江西省建设厅网站资质升级查询百度云盘登录
  • 外贸网站建设公司青岛谷歌搜索入口365
  • 男男sm怎么做视频网站深圳网络推广培训学校
  • 网站怎么更改布局竞价广告推广
  • 电商网站建设模型图在线一键建站系统
  • 乐清seo公司网站关键词优化排名
  • 现在装宽带要多少钱徐州seo排名收费
  • dede5.7模板 新闻文章网站源码杭州谷歌seo公司
  • 注册无区域公司有什么要求seo优化诊断
  • 工程 建筑 公司 取名 参考贵港seo关键词整站优化
  • wordpress 改cmsseo简介
  • 怎么免费建自己的网站搜索优化的培训免费咨询
  • 做漫画视频在线观看网站软文营销文章500字