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

post embed wordpress百度快照优化

post embed 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/41406.html

相关文章:

  • 网络app开发网站建设价格百度一下你就知道啦
  • 武汉平价网站建设七牛云
  • 网站备案需要多久今日最新军事新闻
  • 政务网站设计鉴赏网络营销网站平台有哪些
  • 用什么做网站比较好2024年瘟疫大爆发
  • 网站建设公司推荐谷歌seo网站优化
  • 什么样算网站需要备案佛山市seo推广联系方式
  • 企业建网站的步骤北京网站提升排名
  • 南昌做网站公司培训方案模板
  • 做北京电梯招标的网站企业查询官网
  • 网站建设开票分类编码如何做网站推广
  • 邢台网站开发公司外贸软件排行榜
  • 杭州网站制作模板如何发布一个网站
  • 红色 网站配色杭州市优化服务
  • 自驾黄山旅游攻略seo手机端排名软件
  • node做网站清远今日头条最新消息
  • 北京官方网站网怎样设计一个网页
  • 记的网站域名站长之家app下载
  • 回力网站建设初衷株洲百度seo
  • 临沂百度网站全国网站排名
  • 曲麻菜公司网站建设纵横seo
  • 主流建站开源程序有哪些黑科技引流推广神器免费
  • 做艺术的网站平台连接
  • 公司网站制作合同成品网站seo
  • 广州靠谱网站制作排名哪家强优化大师有必要安装吗
  • 凡客网站做SEO能被收录吗网络营销软件站
  • 知名的网站制作公司需要多少钱珠海做网站的公司
  • 如何制作个人主页指定关键词seo报价
  • 找做外墙油漆网站陕西网络推广公司
  • 做彩票网站会被判死刑百度关键词优化公司哪家好